我看到一些奇怪的事情,如果我不使用我的原始输入字符串从char数组转换回字符串,那么新字符串中不会发生更改?
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.print("Type in String:");
String theString = scan.nextLine();
theString = theString.replaceAll("\\s+", " ");
char [] convert = theString.toCharArray();
convert[0] = Character.toUpperCase(convert[0]);
for(int i = 0; i < convert.length; i++){
if(Character.isWhitespace(convert[i])){
convert[i+1] = Character.toUpperCase(convert[i+1]);
}
}
theString = String.valueOf(convert);
System.out.println(theString);
如果将第2行的theString更改为最后一行,则说:
String newString = String.valueOf(convert);
或
String newString = String(convert);
我的输出不会改变输入!该程序总结大写字符串中每个单词的第一个字符。有人可以解释为什么会发生这种情况吗?
答案 0 :(得分:1)
它运行正常,但您要考虑的是在字符串中扫描后使用
theString.trim();
这将从末尾删除whitspace,因为现在如果我输入“hello hello”(注意结尾处的空格),由于循环中的i+1
,它将抛出OutOfBOundsException。
如果索引i+1
存在,只需检查循环内部。
答案 1 :(得分:1)
它的作品。我测试了它。我想你忘了改变
System.out.println(theString);
到
System.out.println(newString);
完整代码:
public static void main (String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.print("Type in String:");
String theString = scan.nextLine();
theString = theString.replaceAll("\\s+", " ");
char [] convert = theString.trim().toCharArray();
convert[0] = Character.toUpperCase(convert[0]);
for(int i = 0; i < convert.length; i++){
if(Character.isWhitespace(convert[i])){
convert[i+1] = Character.toUpperCase(convert[i+1]);
}
}
String newString = String.valueOf(convert);
System.out.println(newString);
}
输入:hello world
输出:Hello World
这就是你的期望:)当String以空格结束时,我修复了ArrayIndexOutOfBounds异常。
char [] convert = theString.trim().toCharArray();