转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4261992.html
声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明。谢谢。
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b 。
题目分析:
求字符串的某个字符出现的次数可以很巧妙的运用split("字符") 方法将原字符串分割为字符串数组,再判断这个字符串数组的长度来实现,若长度等于2,则该字符就刚好出现一次。
值得注意的是:该字符出现m次,split("字符")方法的结果,若当该字符出现在字符串开头或中间时,如gaaafffvvvttt,aaaffgfvvvttt你得到的长度是m+1;当该字符出现在字符串末尾时,以该字符split字符串如aaafffvvvtttg,你得到的长度是m,因此要将原字符串进的尾部行一些处理。
我的处理方式是:先的到原字符串的长度n,再在字符串的末尾加上一个非空字符(这样才能处理最后一个字符本身就为空的情况),而遍历的时候仍然是[0,n-1],不遍历这后来添加的字符。
java实现源码:
1 package com.interview; 2 3 import java.util.Scanner; 4 5 /** 6 * 题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 7 * @author wjh 8 * 9 */ 10 public class _17FirstChar { 11 12 /** 13 * @param args 14 */ 15 public static void main(String[] args) { 16 _17FirstChar invoker= new _17FirstChar(); 17 Scanner scan = new Scanner(System.in); 18 while(true){ 19 System.out.println("请输入一个字符串:"); 20 String str= scan.nextLine(); 21 if(str.equals("退出")){ 22 System.exit(0); 23 } 24 invoker.findCharacter(str); 25 } 26 } 27 28 //在一个字符串中找到第一个只出现一次的字符 29 private void findCharacter(String str){ 30 if(str==null || str.equals("")){ 31 System.out.println("输入的字符串为空!"); 32 return; 33 } 34 int n = str.length(); 35 //对字符串的末尾进行处理,否则当最后一个为空格时或某一个字符第 36 //一次出现在末尾时无法正确处理 37 String str1 = str+"a"; //这里添加一个除了空格之外的任意字符 38 for(int i=0;i<n;i++){ 39 char temp = str1.charAt(i); 40 String[] ss=str1.split(""+temp); //以第i个字符将字符串分割成字符数组 41 int length = ss.length; 42 if(length==2){ 43 if(temp==' '){ 44 System.out.println("字符串"+str+"里第一个只出现一次的字符为:空格 "); 45 } 46 else 47 System.out.println("字符串"+str+"里第一个只出现一次的字符为:"+temp+" "); 48 return; 49 } 50 } 51 System.out.println("没有找到这样的字符!"); 52 } 53 }
运行结果:
请输入一个字符串:
atghtghjyuuy
字符串atghtghjyuuy里第一个只出现一次的字符为:a
请输入一个字符串:
tghttaghjyuuy
字符串tghttaghjyuuy里第一个只出现一次的字符为:a
请输入一个字符串:
tghttghjyuuya
字符串tghttghjyuuya里第一个只出现一次的字符为:j
请输入一个字符串:
tghttghayuuyaj
字符串tghttghayuuyaj里第一个只出现一次的字符为:j
请输入一个字符串:
eeerrryuyddt
字符串 eeerrryuyddt里第一个只出现一次的字符为:空格
请输入一个字符串:
eeerrryuyutddt
没有找到这样的字符!