从char数组创建一个新字符串

时间:2013-12-05 08:30:44

标签: java string char

我看到一些奇怪的事情,如果我不使用我的原始输入字符串从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);

我的输出不会改变输入!该程序总结大写字符串中每个单词的第一个字符。有人可以解释为什么会发生这种情况吗?

2 个答案:

答案 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();