Java 从字符数组创建新字符串

Java 从字符数组创建新字符串,java,string,char,Java,String,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+",

我看到了一些奇怪的现象,如果我不使用原始输入字符串从字符数组转换回字符串,新字符串中就不会发生更改

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);


我的输出不会改变输入!总之,这个程序将字符串中每个单词的第一个字符大写。有人能解释为什么会发生这样的事情吗?

< p>它工作得很好,但是你要考虑的是在扫描字符串后使用

theString.trim();
这将从末尾删除whitspaces,因为现在如果我输入“hello hello”(注意末尾的空格),它将抛出边界外异常,因为循环中的
I+1


或者只需检查循环内部是否存在索引
i+1

它可以工作。我测试过了。我想你忘了换衣服了

System.out.println(theString);

完整代码:

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作为输出。但是,如果我更改要转换为字符串的字符数组的名称或变量,如果
newString
包含转换后的字符串,它将无法正常工作,但是您打印字符串,显然字符串已打印。而
字符串
是初始字符串,不是转换后的字符串。您的程序对我来说运行良好。你确定粘贴正确吗?你有一个不知道的错误。如果您的输入以空白字符结尾,则当转换超出字符串结尾时,您将得到一个超出边界的数组。您是对的。。。愚蠢的我。。。很抱歉然后接受答案,将问题标记为已回答:)
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);    
}
char [] convert = theString.trim().toCharArray();