Java - 为匹配的单词添加数字

时间:2015-03-25 08:16:50

标签: java

我试图为匹配的单词添加计数,如下所示:

  

匹配单词:"文字"

     

输入:文本文本文本TextText ExampleText

     

输出:Text1 Text2 Text3 Text4Text5 ExampleText6

我试过这个:

String text = "Text Text Text TextText ExampleText";
String match = "Text";
int i = 0;
while(text.indexOf(match)!=-1) {
text = text.replaceFirst(match, match + i++);
}

不能正常工作,因为它会永远循环,匹配保留在字符串中,而IndexOf永远不会停止。

你建议我做什么? 有没有更好的方法呢?

7 个答案:

答案 0 :(得分:2)

这是一个StringBuilder,但不需要拆分:

public static String replaceWithNumbers( String text, String match ) {
    int matchLength = match.length();
    StringBuilder sb = new StringBuilder( text );

    int index = 0;
    int i = 1;
    while ( ( index = sb.indexOf( match, index )) != -1 ) {
        String iStr = String.valueOf(i++);
        sb.insert( index + matchLength, iStr );

        // Continue searching from the end of the inserted text
        index += matchLength + iStr.length();
    }

    return sb.toString();
}

答案 1 :(得分:2)

首先取一个stringbuffer即结果,然后用匹配(目标)溢出源。 除了“Text”之外,它会产生一系列空白和剩余的单词。 然后检查isempty的条件,并根据它替换数组位置。

String text = "Text Text Text TextText ExampleText";
    String match = "Text";
    StringBuffer result = new StringBuffer();
    String[] split = text.split(match);
    for(int i=0;i<split.length;){
        if(split[i].isEmpty())
            result.append(match+ ++i);
        else
            result.append(split[i]+match+ ++i);
    }
    System.out.println("Result is =>"+result);

O / P 结果是=&gt; Text1 Text2 Text3 Text4Text5 ExampleText6

答案 2 :(得分:1)

试试此解决方案

    String text = "Text Text Text TextText Example";
    String match = "Text";
    String lastWord=text.substring(text.length() -match.length());

    boolean lastChar=(lastWord.equals(match));

    String[] splitter=text.split(match);
    StringBuilder sb = new StringBuilder();
    for(int i=0;i<splitter.length;i++)
    {

       if(i!=splitter.length-1)
           splitter[i]=splitter[i]+match+Integer.toString(i);
       else
          splitter[i]=(lastChar)?splitter[i]+match+Integer.toString(i):splitter[i];

       sb.append(splitter[i]);
       if (i != splitter.length - 1) {
           sb.append("");
       }
    }
    String joined = sb.toString();
    System.out.print(joined+"\n");

答案 3 :(得分:1)

一种可能的解决方案可能是

String text = "Text Text Text TextText ExampleText";
String match = "Text";
StringBuilder sb = new StringBuilder(text);
int occurence = 1;
int offset = 0;
while ((offset = sb.indexOf(match, offset)) != -1) {
    // fixed this after comment from @RealSkeptic
    String insertOccurence = Integer.toString(occurence);
    sb.insert(offset + match.length(), insertOccurence);
    offset += match.length() + insertOccurence.length();
    occurence++;
}
System.out.println("result: " + sb.toString());

答案 4 :(得分:0)

这对你有用:

public static void main(String[] args) {
    String s = "Text Text Text TextText ExampleText";
    int count=0;
    while(s.contains("Text")){
        s=s.replaceFirst("Text", "*"+ ++count); // replace each occurrence of "Text" with some place holder which is not in your main String.
    }
    s=s.replace("*","Text");
    System.out.println(s);


}

O / P:

Text1 Text2 Text3 Text4Text5 ExampleText6

答案 5 :(得分:0)

我将@DeveloperH的代码重构为:

public class Snippet {

    public static void main(String[] args) {
        String matchWord = "Text";
        String input = "Text Text Text TextText ExampleText";
        String output = addNumbersToMatchingWords(matchWord, input);
        System.out.print(output);
    }

    private static String addNumbersToMatchingWords(String matchWord, String input) {
        String[] inputsParts = input.split(matchWord);

        StringBuilder outputBuilder = new StringBuilder();
        int i = 0;
        for (String inputPart : inputsParts) {
            outputBuilder.append(inputPart);
            outputBuilder.append(matchWord);
            outputBuilder.append(i);
            if (i != inputsParts.length - 1)
                outputBuilder.append(" ");
            i++;
        }
        return outputBuilder.toString();
    }
}

答案 6 :(得分:0)

我们可以通过使用stringbuilder来解决这个问题,它提供了最简单的构造来在字符串中插入字符。以下是代码

    String text = "Text Text Text TextText ExampleText";
    String match = "Text";
    StringBuilder sb = new StringBuilder(text);
    int beginIndex = 0, i =0;
    int matchLength = match.length();
    while((beginIndex = sb.indexOf(match, beginIndex))!=-1) {
         i++;
         sb.insert(beginIndex+matchLength, i);
         beginIndex++;
    }
    System.out.println(sb.toString());