代码之家  ›  专栏  ›  技术社区  ›  jlog

Java字符串缓冲区-如何删除

  •  0
  • jlog  · 技术社区  · 10 年前

    我需要创建一个方法,它接收一个String并生成一个不包含元音的新词,并将每个辅音替换为其在原始单词中的位置。我用的词是 "program" 所以我应该回去 "12o457" .

    下面是我的代码-当我尝试使用 deleteCharAt 但我可以在这里很好地使用append。

    public class Methods {
    
        public String getWord(String word){
            StringBuffer sb = new StringBuffer();
    
    
            for(int i=0; i<word.length(); i++)
            {
                if(word.charAt(i) =='a' ||
                    word.charAt(i) == 'e' ||
                    word.charAt(i) == 'i')
                    {
                    sb.deleteCharAt(i);
                    }
            else if(word.charAt(i)=='o' || word.charAt(i)=='u')
                {
                sb.append(word.charAt(i));
                }
            else{sb.append((i));}
            }
    
            return sb.toString();
    
        }
    }
    
    3 回复  |  直到 10 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    您试图删除StringBuilder中从未有过的字符,只需按如下方式更改方法:

    public String getWord(String word) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < word.length(); i++) {
            if (word.charAt(i) == 'o' || word.charAt(i) == 'u') {
                sb.append(word.charAt(i));
            } else if (word.charAt(i) != 'a' && word.charAt(i) != 'e' && word.charAt(i) != 'i') {
                sb.append((i + 1));
            }
        }
        return sb.toString();
    }
    

    这样你只需要添加你想要的字母 o 和 u 并跳过 a , e , i 元音和所有辅音。此外,Java中的索引从 0 因此,要获得所需的输出,您需要添加 i + 1 而不仅仅是 我 .

    运行上述代码后,我得到:

    12o457
    

    正如预期的那样。然而,你应该改写你的问题,因为你不想要任何元音,你要加 o型 和 u 它们是元音。你想要原来的位置,所以不是 i+1 但是 我 它会给你:

    01o346
    

    然而,如果使用更大的单词,则可能会给出如下内容:

    Input: programprogram
    Output: 12o45789o111214
    

    正如你所看到的,它变得杂乱不堪。希望您不会使用长度>10个字符。

    编辑

    我也没有注意到这一点,但正如@PeterLawrey在他的 comment 以上,请勿使用 String Buffer 而是使用 String Builder 。有关此的详细信息,请参见 StringBuilder vs StringBuffer

        2
  •  1
  •   Evgeniy Strepetov    10 年前

    好吧,你不需要使用方法 deleteCharAt(i) 对于StringBuilder,因为默认情况下它是空的,并且只添加所需的字符 Strings 索引从0开始,所以辅音的位置需要附加(i+1)

    public static String getWord(String word) {
        StringBuilder sb = new StringBuilder();
    
        for (int i = 0; i < word.length(); i++) {
    
            if (word.charAt(i) == 'o' || word.charAt(i) == 'u') {
                sb.append(word.charAt(i));
            } else if (!(word.charAt(i) == 'a' ||
                    word.charAt(i) == 'e' ||
                    word.charAt(i) == 'i')) {
                sb.append((i + 1));
            }
        }
    
        return sb.toString();
    }
    
        3
  •  0
  •   Mohammad Salem    10 年前
        String string="how are you?";       
        string.replaceall("[a|e|o|i|u]","*");
    
        while(string.contains("*")){
        string.replaceFirst("*",string.indexOf("*")+1);
        }
    

    这将起作用:)