2014-10-03 166 views
3

我試圖讓一個程序的工作,其執行以下操作:獲取每個單詞的第一個字符的字符串

比方說,我們有一個叫Stringname,設置爲"Stack Overflow Exchange"。我想輸出給用戶"SOE",每個單詞的第一個字符。我嘗試了split()方法,但我沒有做到。

我的代碼:

public class q4 { 
    public static void main(String args[]) { 
     String x = "michele jones"; 
     String[] myName = x.split(""); 
     for(int i = 0; i < myName.length; i++) { 
      if(myName[i] == "") { 
       String s = myName[i]; 
       System.out.println(s); 
      }    
     }   
    }  
} 

我想,如果有任何空間探測,那麼我可以簡單地採取下一個索引。誰能告訴我我做錯了什麼?

+0

我知道這是不是你的問題,而是'MYNAME [I] == 「」'是兩種方式都不好。 1.)您正在使用'=='比較錯誤的字符串。 2.)不要使用''「'比較'String',而是使用'String'的'isEmpty()'方法。 – bcsb1001 2014-10-03 16:38:07

回答

3

嘗試拆分,然後讓每個單詞的charAt(0)(第一個字符),並打印出來是這樣的:

public static void main(String args[]) { 
    String x = "Shojibur rahman"; 
    String[] myName = x.split(" "); 
    for (int i = 0; i < myName.length; i++) { 
     String s = myName[i]; 
     System.out.println(s.charAt(0)); 
    } 
} 
8
String initials = ""; 
for (String s : fullname.split(" ")) { 
    initials+=s.charAt(0); 
} 
System.out.println(initials); 

這個工作是這樣的:

  1. 聲明一個變量「的縮寫」,以保存結果
  2. 分割空間的全名字符串,並反覆對單個詞
  3. 添加到首字母縮寫每個單詞的第一個字符

編輯:

如所建議的字符串連接往往效率不高,而且StringBuilder的是一個更好的選擇,如果您正在使用很長的字符串:

StringBuilder initials = new StringBuilder(); 
for (String s : fullname.split(" ")) { 
    initials.append(s.charAt(0)); 
} 
System.out.println(initials.toString()); 

編輯:

你可以得到一個字符串作爲字符數組簡單地說:

char[] characters = initials.toString().toCharArray(); 
+0

我會使用一個StringBuilder,因爲如果要「解析」的字符串很大,您的代碼在內存方面效率會很低 – Jhon 2014-10-03 14:40:21

+0

對於沒有大括號的語句是邪惡的。請添加大括號。 – 2014-10-03 14:41:34

+0

謝謝你,如果我想存儲數組中的每個首字母, – 2014-10-03 15:14:34

1

你需要將它與一個空間分開,你不能用「」分割。這並不意味着什麼。 你做錯了的另一件事是在字符串比較中===不正確。請參考How do I compare strings in Java?

public class q4 { 
    public static void main(String args[]) 
    { 
     String x="Shojibur rahman"; 
     String [] myName=x.split(" "); 
     for(int i=0; i<myName.length; i++) 
     { 
      if(!myName[i].equals("")) 
      { 
       System.out.println(myName[i]); 
      }    
     }   
    }  
} 
2

有一些錯誤的代碼:

String [] myName=x.split(""); 

難道你真的想拆就""(空字符串)?你可能想拆就空間:

String [] myName=x.split(" "); 

和:

if(myName[i]=="") 

決不會在Java中==比較字符串,總是使用.equals

if (myName[i].equals("")) 
1

要拆分的一個空字符串不是空間「」。你的循環也沒有多大意義,我不確定你想要做什麼。通過" "(空間)

String [] myName=x.split(" "); 
    for(int i=0; i<myName.length; i++) 
    { 
     if (!myName[i].isEmpty()) { 
      System.out.println(myName[i].charAt(0)); 
     }    
    }   
1

既然你沒有線程安全的做你的程序,你可以使用StringBuilder。 對於長字符串,我建議你可以使用StringTokenizer

+0

1.)不回答問題2.)除非你有一個很好的理由,否則不要使用'StringBuffer'。 ['StringTokenizer'文檔](http://docs.oracle.com/javase/8/docs/api/java/util/StringTokenizer.html),它的使用在代碼中是不鼓勵的。 – bcsb1001 2014-10-03 16:40:41

+1

對不起,應該是'StringBuilder'。謝謝你讓我知道,我沒有仔細閱讀StringTokenizer Api。 – 2014-10-03 16:48:30

2

與Java 8流:

String initials = Arrays.stream(str.split(" ")) 
    .map(s -> s.substring(0, 1)) 
    .collect(Collectors.joining()); 
System.out.println(initials); 
0

中的Java 8中的接受回覆:

/** 
* Gets the first character of every word in the sentence. 
* 
* @param string 
* @return 
*/ 
public static String getFirstLetterFromEachWordInSentence(final String string) { 
    if (string == null) { 
     return null; 
    } 
    StringBuilder sb = new StringBuilder(); 
    Arrays.asList(string.split(" ")).forEach(s -> sb.append(s.charAt(0)).append(" ")); 
    return sb.toString().trim(); 
} 
相關問題