2014-10-03 168 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(); 
} 
相关问题