Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中,在单词之间添加空格,并使每个单词(第一个小写字母除外)变为_Java_String_Stringbuilder - Fatal编程技术网

在java中,在单词之间添加空格,并使每个单词(第一个小写字母除外)变为

在java中,在单词之间添加空格,并使每个单词(第一个小写字母除外)变为,java,string,stringbuilder,Java,String,Stringbuilder,我会告诉你的,是的,这是家庭作业。然而,我在完成它的过程中遇到了困难,急需帮助。我对Java也很陌生,还在学习Java语言 好的,我正在尝试编写一个程序,要求用户输入一个没有空格的句子,但让他们大写每个单词的第一个字母。然后,程序应在单词之间添加空格,并仅将第一个单词大写,其余单词应以小写开头。我可以在单词之间插入空格,但我无法将每个单词的第一个字母小写。我尝试了几种不同的方法,最近的一种方法给了我以下错误信息: Exception in thread "main" java.lang.Str

我会告诉你的,是的,这是家庭作业。然而,我在完成它的过程中遇到了困难,急需帮助。我对Java也很陌生,还在学习Java语言

好的,我正在尝试编写一个程序,要求用户输入一个没有空格的句子,但让他们大写每个单词的第一个字母。然后,程序应在单词之间添加空格,并仅将第一个单词大写,其余单词应以小写开头。我可以在单词之间插入空格,但我无法将每个单词的第一个字母小写。我尝试了几种不同的方法,最近的一种方法给了我以下错误信息:

 Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
 ex out of range: 72
    at java.lang.AbstractStringBuilder.setCharAt(Unknown Source)
    at java.lang.StringBuilder.setCharAt(Unknown Source)
    at renfroKristinCh9PC14.main(renfroKristinCh9PC14.java:45)
我张贴了我的代码,任何和所有的帮助,你可以给我将非常感谢。 谢谢

/*
这个程序将要求用户输入一个没有空格的句子,但是
每个单词的第一个字母大写。然后它会将这些单词分开
并且只将句子的第一个单词大写。
*/
导入java.util.*;
公共类renfroKristinCh9PC14
{
公共静态void main(字符串[]args)
{
//一个字符串变量用于保存用户的输入,一个变量用于保存修改后的句子
字符串输入=”;
//变量来保存字符
煤焦指数;
//为输入创建scanner类的实例
扫描仪键盘=新扫描仪(System.in);
//欢迎用户并解释程序
userWelcome();
//从用户那里获取句子
System.out.println(“\n请输入一个不带空格但带\n的句子”);
System.out.println(“每个单词的第一个字母大写。\n”);
System.out.print(“示例:蝙蝠侠史上最好的超级英雄!”);
输入=键盘.nextLine();
//创建StringBuilder类的实例
StringBuilder语句=新的StringBuilder(输入);
//在单词之间加空格
for(int i=0;i<句子长度();i++)
{
索引=句子。字符(i);
如果(i!=0&&Character.isUpperCase(index))
{
setCharAt(索引,Character.toLowerCase(索引));
句子。附加(“”);
}
追加(索引);
}   
//向用户显示新句子
System.out.println(“\n\n您的句子现在是:“+句子”);
}
/***********************************************************************************    *************************
************************************************************************************    *************************
此函数欢迎用户并显示程序
*/
公共静态void userWelcome()
{
System.out.println(“\n\n************************************************************************************************************************************************\n”);
System.out.println(“*欢迎使用分词程序*”);
System.out.println(“*此应用程序将要求您输入一个不带*”的句子”;
System.out.println(“*空格,但每个单词大写,然后将改变*”;
System.out.println(“*句,使每个单词和*之间有空格”);
System.out.println(“*仅句子的第一个单词大写*”);
System.out.println(“\n*********************************************************************************************************************************\n”);
}

}这里有一些不同的问题。最主要的是当你打电话的时候

sentence.setCharAt(index, Character.toLowerCase(index));
您将传入实际字符作为第一个参数,而不是位置。你看,你刚刚完成了

index = sentence.charAt(i);
因此,
索引
就是字符本身。Java隐式地将该字符转换为整数,但它不是您想要的整数。你也许应该写信

sentence.setCharAt(i, Character.toLowerCase(index));
相反

还有,你的
句子.append(“”)
会将空格附加到
StringBuilder
的末尾,而不是插入您想要的位置


和你最后的
句子。追加(索引)将复制该字符。我真的认为您不想这样做。

您正在对正在迭代的同一字符串进行追加。相反,只需将您的
语句
设置为空的
StringBuilder
。然后,您可以在迭代
输入时附加到它。例如:

StringBuilder sentence = new StringBuilder();

//add spaces between the words
for(int i=0; i < input.length(); i++)
{
  char letter = input.charAt(i);
  if(i != 0 && Character.isUpperCase(letter))
  {
    sentence.append(' ');
    sentence.append(Character.toLowerCase(letter));
  }
  else
  {
    sentence.append(letter);
  }
}   
StringBuilder语句=新建StringBuilder();
//在单词之间加空格
对于(int i=0;i

(请注意,我已将变量名从
index
更改为
letter
,这就不那么容易混淆了。)

+1作为答案,他可以通过使用
temp=句子
存储输入来获得所需的输出,然后最终结果将是
System.out.println(\n\n您的句子现在是:“+句子.replace”)(0,temp.length(),“”);
@vinayakpingle他只需使用
语句就可以得到他想要的输出。我不需要在上面的代码之外更改任何OP的代码。这非常有效,谢谢你!我花了几个小时试图解决这个问题,你用三行代码修复了它,先生,你现在是我的英雄。
StringBuilder sentence = new StringBuilder();

//add spaces between the words
for(int i=0; i < input.length(); i++)
{
  char letter = input.charAt(i);
  if(i != 0 && Character.isUpperCase(letter))
  {
    sentence.append(' ');
    sentence.append(Character.toLowerCase(letter));
  }
  else
  {
    sentence.append(letter);
  }
}