麻烦在另一个字符串中的特定点输入字符串
问题描述:
package num20;
import TurtleGraphics.KeyboardReader;
public class Num20main {
public static void main(String[] args) {
KeyboardReader reader = new KeyboardReader();
System.out.println("Enter String");
String sentence = reader.readLine();
StringBuilder sb = new StringBuilder(sentence);
System.out.println(sb.toString());
//String e = "egg";
for(int x = 0; x < sentence.length(); x++){
String e = "egg";
char l = sb.charAt(x);
int index = x;
if(l == ('a') || l == ('A') || l == ('e') || l == ('E') || l == ('I') || l == ('i') || l == ('O') || l == ('o') || l == ('U') || l == ('u')){
sb.insert(index, e);
System.out.println(sb.toString());
}
}
System.out.println(sb.toString());
}
}
这段代码打印出:麻烦在另一个字符串中的特定点输入字符串
输入字符串
我爱的Java
我爱的Java
eggI爱的Java
eggeggI Love Java
eggeggeggI爱的Java
eggeggeggeggI爱的Java
eggeggeggeggI爱的Java
它应该打印出 “eggI Leggovegge Jeggavegga”
答
你加入你的字符串开头。 所以发生的是你添加“蛋”,但你的索引不会前进。 “我爱java”'我'是在索引0. 但是当你添加一个“鸡蛋”,我们有“eggI爱java”。 现在'我'处于索引3,但此时x是1。
做到这一点最简单的方法,是在相反的方向运行的:
for(int x = sentence.length()-1 ; x <= 0 ; x--){ //The content of your for here }
这样做,加入了“蛋”不会将您的功能造成干扰。
答
试试这个方法:
String sentence = "I love Java";
System.out.println(Arrays.stream(sentence.split(" ")).map(str -> str.replaceAll("(?i)[aeiou]", "fruit$0")).collect(Collectors.joining(" ")));
基本上,你首先做一个区分大小写的查找,然后用火柴+“水果”取代了比赛。
答
您的索引以与x相同的速度移动,但是每个替换都会插入3,而不是1个字符。
我参加了一个固定的字符串,方便测试和易于控制添加的exepected结果到底:
public class Num20 {
public static void main(String[] args) {
String sentence = "I Love Java";
StringBuilder sb = new StringBuilder(sentence);
System.out.println(sb.toString());
// String e = "egg"; Good idea to declare this unchanged variable
// here, but let us call it 'egg'.
String egg = "egg";
int index = 0; // index out of loop
for (int x = 0; x < sentence.length(); x++){
char l = sb.charAt (index); // sb is under constant change,
// we need to insert at a the place of sb, not sentence
// hence we use the faster moving index 'index', not 'x'
// if (l == ('a') || l == ('A') || l == ('e') || l == ('E') || l == ('I') || l == ('i') || l == ('O') || l == ('o') || l == ('U') || l == ('u')) {
// not wrong, but more brief:
if ("aeiouAEIOU".indexOf (l) != -1) {
sb.insert (index, egg);
System.out.println(sb.toString());
// we inserted 3 characters before the vowel
index +=3;
}
// we have to forward one (more) step for every x in sentence, too:
++index;
}
System.out.println(sb.toString());
System.out.println("eggI Leggovegge Jeggavegga?");
}
}