我有一个字符串如下:
String sentence = "I have 20 apples.\n" +
"Kevin has 15 apples.\n" +
"Peter has nothing."
我想将每个字母字符增加2,而其他字符(空格,特殊字符,换行符等)保持不变。
这是我写的程序。
public static void incrementCharacters(String sentence) {
BufferedReader reader = new BufferedReader(new StringReader(sentence));
StringBuilder str = new StringBuilder();
while((line=reader.readLine()) != null){
for(int i =0; i < line.length(); i++){
char ch = line.charAt(i);
if(Character.isAlphabetic(ch)){
if(Character.isUpperCase(ch){
str.append(Character.toUpperCase((char)(ch + 2)));
} else {
str.append(Character.toLowerCase((char)(ch + 2));
}
} else {
str.append(ch);
}
}
}
System.out.println(str);
}
但是我得到的输出是“我有20个苹果。Mgxkpjcu 15 crrngu.Rgvgt icu pqvjkpi”。省略换行符。 如何修改该程序,以便在输出中包含新行?
答案 0 :(得分:1)
我不理解您对BufferedReader
或Character.toUpperCase()
的使用。只需遍历您的字符串,然后将每个字母即2个字符加2到StringBuilder
,然后返回结果即可。
public class MyClass {
public static void main(String args[]) {
String sentence = "I have 20 apples.\n" +
"My friend has 15 apples.\n" +
"My cousin has nothing.";
System.out.println(incrementCharacters(sentence));
}
public static String incrementCharacters(String sentence) {
StringBuilder sb = new StringBuilder();
for (char c : sentence.toCharArray()) {
sb.append(Character.isLetter(c) ? (char)(c + 2) : (char)c);
}
return sb.toString();
}
}
结果:
K jcxg 20 crrngu.
O{ htkgpf jcu 15 crrngu.
O{ eqwukp jcu pqvjkpi.
答案 1 :(得分:0)
因为您使用的是BufferedReader
,当您致电readLine
时,它将删除换行符。
您不需要BufferedReader
,只需迭代sentence
中的每个字符。
public static void incrementCharacters(String sentence) {
StringBuilder str = new StringBuilder();
for(int i = 0; i < sentence.length(); i++) {
char ch = sentence.charAt(i);
if(Character.isAlphabetic(ch)) {
str.append((char) (ch + 2));
} else {
str.append(ch);
}
}
System.out.println(str);
}
答案 2 :(得分:0)
BufferedReader.readline()
删除换行符。由于您知道这种情况会在while
循环的每次迭代中发生,因此一种解决方案是将换行符重新插入到输出中。在内部for
循环之后,您可以轻松地做到这一点。
答案 3 :(得分:0)
这是因为您正在调用readLine()。行由\ n分隔,因此它们不包含在readLine()的结果中。这样做
public static void incrementCharacters(String sentence) throws IOException {
BufferedReader reader = new BufferedReader(new StringReader(sentence));
StringBuilder str = new StringBuilder();
String line;
while((line=reader.readLine()) != null){
for(int i =0; i < line.length(); i++){
char ch = line.charAt(i);
if(Character.isAlphabetic(ch)){
if(Character.isUpperCase(ch)){
str.append(Character.toUpperCase((char)(ch + 2)));
} else {
str.append(Character.toLowerCase((char)(ch + 2)));
}
} else {
str.append(ch);
}
}
str.append("\n"); // just add this
}
System.out.println(str);
}