我不知道为什么我的输出不正确。例如,如果输入是"Running is fun“,那么输出应该是"Is running fun”。然而,我得到的输出是“运行”。
import java.util.Scanner;
public class Problem1 {
public static void main( String [] args ) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter text: ");
String sentence = sc.nextLine();
int space = sentence.indexOf(" ");
String firstWord = sentence.substring(0, space + 1);
String removedWord = sentence.replaceFirst(firstWord, "");
String newSentence = removedWord.substring(0,1).toUpperCase() +
firstWord.substring(1).toLowerCase();
System.out.println("");
System.out.println( newSentence );
}
}
发布于 2018-09-23 04:40:36
removedWord.substring(0,1).toUpperCase()
此行将句子中第二个单词的第一个大写字母相加。(I
)
firstWord.substring(1).toLowerCase();
将第一个单词的每个字母添加到句子的末尾。(unning
)
因此,这将创建Iunning
的输出。您需要在String
中添加removedWord
的其余部分,以及一个空格和firstWord
的第一个字母,作为removedWord
中空格的小写字母。您可以通过使用indexOf
查找空间,然后使用substring()
在紧跟在空间索引后面的firstWord.toLowerCase()
上添加:
removedWord = removedWord.substring(0, removedWord.indexOf(" ")) + " " +
firstWord.toLowerCase() +
removedWord.substring(removedWord.indexOf(" ") + 1,
removedWord.length());
String newSentence = removedWord.substring(0,1).toUpperCase() +
removedWord.substring(1, removedWord.length());
输出:
Is running fun
发布于 2018-09-23 04:44:41
你的问题是
firstWord.substring(1).toLowerCase()
并不是像你期望的那样工作。
假设您的示例中的firstWord
为“Running“
,那么
”Running“.substring(1)
返回“unning”
”unning“.toLowerCase()
显然返回“unning”
发布于 2018-09-23 04:45:09
问题出在String newSentence
。您没有正确地组合firstWord
和removedWord
。
你的案例应该是这样的:
String newSentence = removedWord.substring(0, 1).toUpperCase() // I
+ removedWord.substring(1,2) + " " // s
+ firstWord.toLowerCase().trim() + " " // running
+ removedWord.substring(2).trim(); // fun
编辑(添加新的解决方案。credits @andy):
String[] words = sentence.split(" ");
words[1] = words[1].substring(0, 1).toUpperCase() + words[1].substring(1);
String newSentence = words[1] + " "
+ words[0].toLowerCase() + " "
+ words[2].toLowerCase();
https://stackoverflow.com/questions/52460630
复制相似问题