如何替换字从一个字符串,如果它包含任何字从我的字符串数组



我想替换与我的字符串数组中任何一个匹配的单词,我尝试了下面的代码,但它只替换了第一个条件,我相信这是因为返回语句,但我无法找出另一种方法来做到这一点。

public String wordsToCorrect (String word)
        {
            word = word.toLowerCase();
            StringBuilder sb;
            String[] bro =new String[5];
            bro [0] = "bros";
            bro [1] = "bro";
            bro [2] = "bros";
            bro [3] = "broda";
            bro [4] = "brother";
            String[] brother = bro;
            String[] si = new String[6];
            si [0] = "sis";
            si [1] = "sister";
            si [2] = "sista";
            si [3] = "6sta";
            si [4] = "sisy";
            si [5] = "sissy";
            String[] sister = si;
            for ( int i=0;i < brother.length;i ++ )
                {
                    if ( StringUtils.containsIgnoreCase(word, brother [i]) )
                        {
                            StrBuilder replace = new StrBuilder();
                            replace.append(word);
                            replace.append(" ");
                            replace.replaceAll(brother [i], "brother");
                            return replace.toString();
                        }
                }
            for ( int i= 0;i < sister.length;i++   )
                {
                    if ( StringUtils.containsIgnoreCase(word, sister [i]) )
                        {
                            StrBuilder replace = new StrBuilder();
                            replace.append(word);
                            replace.append(" ");
                            replace.replaceAll(sister [i], "sister");
                            return replace.toString();
                        }
                }
public String wordsToCorrect (String word)
{
    StringBuilder sb;
    String[] bro =new String[5];
    bro [0] = "bros";
    bro [1] = "bro";
    bro [2] = "bros";
    bro [3] = "broda";
    bro [4] = "brother";
    String[] brother = bro;
    String[] si = new String[6];
    si [0] = "sis";
    si [1] = "sister";
    si [2] = "sista";
    si [3] = "6sta";
    si [4] = "sisy";
    si [5] = "sissy";
    List<String> broList = Arrays.asList(bro);
    List<String> sisList = Arrays.asList(si);
    String[] words = word.split("\s");
    for(int i=0; i<words.length; i++){
        String singleWord = words[i];
        if(broList.contains(singleWord.toLowerCase())){
            words[i] = "brother";
        }else if(sisList.contains(singleWord.toLowerCase())){
            words[i] = "sister";
        }
    }
    return String.join(" ", words);
}

编辑:添加说明

你的问题不只是循环结束。如果你想继续你的循环,你可以把"brother"中的"bro"替换成"brother",这样你就得到了"brother"。在我的代码中,首先按空格分割,这样就可以隔离每个单词,然后将其与要查找的单词进行匹配。我使用列表是因为使用contains更简单。此外,您不需要ignoreCase,因为您正在执行。tolower()(我更喜欢它在contains参数上,因为这不会改变原始字符串上的大写字母)。

这段代码可以很好地处理任何使用空格作为分隔符的字符串。如果你还需要使用换行符,你应该需要修改分割部分,并设法维护分隔符,可能使用类似于您的初始方法。

你在循环内部初始化StrBuilder,并且每次都初始化它,而且返回将退出循环/方法,调用将被发送回调用位置。

试试下面的代码

          StrBuilder replace = new StrBuilder();                
          for ( int i=0;i < brother.length;i   )
            {
                if ( StringUtils.containsIgnoreCase(word, brother [i]) )
                    {
                        replace.append(word);
                        replace.append(" ");
                        replace.replaceAll(brother [i], "brother");
                    }
            }
         return replace.toString(); // This return statement will also exit from the method, so seperate the brother and sister replacement in seperate methods/calls

把这个放到一个单独的方法中

        StrBuilder replace1 = new StrBuilder();
        for ( int i= 0;i < sister.length;i   )
            {
                if ( StringUtils.containsIgnoreCase(word, sister [i]) )
                    {
                        replace1.append(word);
                        replace1.append(" ");
                        replace1.replaceAll(sister [i], "sister");

                    }
            }
             return replace1.toString();

我在这段代码中看到三个问题:1)循环变量不递增,2)"replace"重新初始化每个循环运行,3)返回结束你的方法。所以试试这个:

            StrBuilder replace = new StrBuilder();                
            for (int i=0;i < brother.length;i++) {
                if (StringUtils.containsIgnoreCase(word, brother [i])) {
                        replace.append(word);
                        replace.append(" ");
                        replace.replaceAll(brother [i], "brother");
                 }
            }
            return replace.toString();

然后对第二个循环进行相同的更改,并使其成为一个单独的方法

相关内容

最新更新