我正在努力让一个程序工作,它执行以下操作:
假设我们有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);
}
}
}
}
我试图检测是否有空格,然后我可以简单地采用下一个索引。谁能告诉我我做错了什么?
答案 0 :(得分:12)
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());
编辑:
您可以简单地将String作为字符数组获取:
char[] characters = initials.toString().toCharArray();
答案 1 :(得分:4)
尝试按" "
(空格)进行拆分,然后获取每个单词的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));
}
}
答案 2 :(得分:2)
您的代码中存在许多错误:
String [] myName=x.split("");
你真的想分开""
(空字符串)吗?你可能想分开空格:
String [] myName=x.split(" ");
和
if(myName[i]=="")
永远不要在Java中将字符串与==
进行比较,始终使用.equals
:
if (myName[i].equals(""))
答案 3 :(得分:2)
使用Java 8流:
String initials = Arrays.stream(str.split(" "))
.map(s -> s.substring(0, 1))
.collect(Collectors.joining());
System.out.println(initials);
答案 4 :(得分:2)
如果您使用的是kotlin,则可以使用以下代码获取初始字符 p>
val myName = name.split(" ")
val initial = myName.fold("", { acc, s -> acc + s[0] })
print(initial)
答案 5 :(得分: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]);
}
}
}
}
答案 6 :(得分:1)
你正在分裂一个空字符串而不是一个空格&#34; &#34 ;.你的循环也没有多大意义,我不知道你想要做什么。
String [] myName=x.split(" ");
for(int i=0; i<myName.length; i++)
{
if (!myName[i].isEmpty()) {
System.out.println(myName[i].charAt(0));
}
}
答案 7 :(得分:1)
由于您的程序不具备线程安全性,因此您可以使用StringBuilder
。
对于长字符串,我建议您使用StringTokenizer
。
答案 8 :(得分:1)
令人惊讶的是,没有人提及使用已经可用的库。可以在这里WordUtils
的形式使用commons-text
String name = "My Name";
String initials = WordUtils.initials(name);
System.out.println(initials); // Outputs: MN
答案 9 :(得分:1)
上面编写的split方法可以正常工作,但在以下情况下会导致错误:
从用户那里获得价值时,可能会发生上述书面情况, 在这种情况下,您可以使用:-
String SubName = "input text provided by user"
String initialsOfSubName = "";
boolean v = true;
for (int i = 0; i < SubName.length(); i++) {
// If it is space, set v as true.
if (SubName.charAt(i) == ' ')
v = true;
else if (SubName.charAt(i) != ' ' && v == true) {
initialsOfSubName += (SubName.charAt(i));
// on the place of string you can store it in an, array or list;
v = false;
}
}
Log.d("testRegex",initialsOfSubName);
答案 10 :(得分: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();
}