麻烦在另一个字符串中的特定点输入字符串

问题描述:

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?"); 
    } 
}