获取每个单词的第一个字符的字符串
我试图让一个程序的工作,其执行以下操作:获取每个单词的第一个字符的字符串
比方说,我们有一个叫String
name
,设置为"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);
}
}
}
}
我想,如果有任何空间探测,那么我可以简单地采取下一个索引。谁能告诉我我做错了什么?
尝试拆分,然后让每个单词的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));
}
}
String initials = "";
for (String s : fullname.split(" ")) {
initials+=s.charAt(0);
}
System.out.println(initials);
这个工作是这样的:
- 声明一个变量“的缩写”,以保存结果
- 分割空间的全名字符串,并反复对单个词
- 添加到首字母缩写每个单词的第一个字符
编辑:
如所建议的字符串连接往往效率不高,而且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();
我会使用一个StringBuilder,因为如果要“解析”的字符串很大,您的代码在内存方面效率会很低 – Jhon 2014-10-03 14:40:21
对于没有大括号的语句是邪恶的。请添加大括号。 – 2014-10-03 14:41:34
谢谢你,如果我想存储数组中的每个首字母, – 2014-10-03 15:14:34
你需要将它与一个空间分开,你不能用“”分割。这并不意味着什么。 你做错了的另一件事是在字符串比较中===不正确。请参考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]);
}
}
}
}
有一些错误的代码:
String [] myName=x.split("");
难道你真的想拆就""
(空字符串)?你可能想拆就空间:
String [] myName=x.split(" ");
和:
if(myName[i]=="")
决不会在Java中==
比较字符串,总是使用.equals
:
if (myName[i].equals(""))
要拆分的一个空字符串不是空间“”。你的循环也没有多大意义,我不确定你想要做什么。通过" "
(空间)
String [] myName=x.split(" ");
for(int i=0; i<myName.length; i++)
{
if (!myName[i].isEmpty()) {
System.out.println(myName[i].charAt(0));
}
}
既然你没有线程安全的做你的程序,你可以使用StringBuilder
。 对于长字符串,我建议你可以使用StringTokenizer
。
1.)不回答问题2.)除非你有一个很好的理由,否则不要使用'StringBuffer'。 ['StringTokenizer'文档](http://docs.oracle.com/javase/8/docs/api/java/util/StringTokenizer.html),它的使用在代码中是不鼓励的。 – bcsb1001 2014-10-03 16:40:41
对不起,应该是'StringBuilder'。谢谢你让我知道,我没有仔细阅读StringTokenizer Api。 – 2014-10-03 16:48:30
与Java 8流:
String initials = Arrays.stream(str.split(" "))
.map(s -> s.substring(0, 1))
.collect(Collectors.joining());
System.out.println(initials);
中的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();
}
我知道这是不是你的问题,而是'MYNAME [I] == “”'是两种方式都不好。 1.)您正在使用'=='比较错误的字符串。 2.)不要使用''“'比较'String',而是使用'String'的'isEmpty()'方法。 – bcsb1001 2014-10-03 16:38:07