Java 从字符串中提取多个相同的字符串

Java 从字符串中提取多个相同的字符串,java,string,Java,String,我需要将一个字符串拆分为一个特定的字符串,该字符串可以放在任何位置(该字符串可以同时出现多次),并通过向类似StringBuffer的内容中添加摘录来重建整个字符串。要查找的特定字符串的大小写必须不敏感 例如: String targeted = "test" ; String plainString ="azertytestqwerty"; //desired outcome StringBuffer sb = new StringBuffer(); sb.append("azerty"

我需要将一个字符串拆分为一个特定的
字符串
,该字符串可以放在任何位置(该字符串可以同时出现多次),并通过向类似
StringBuffer
的内容中添加摘录来重建整个字符串。要查找的特定字符串的大小写必须不敏感

例如:

String targeted =  "test" ;
String plainString ="azertytestqwerty";

//desired outcome

StringBuffer sb = new StringBuffer();
sb.append("azerty");
sb.append("test");
sb.append("qwerty");

--------------------------

String targeted =  "test" ;
String plainString ="a.test";

//desired outcome

StringBuffer sb = new StringBuffer();
sb.append("a.");
sb.append("test");

--------------------------

String targeted =  "test" ;
String plainString ="test mlm";

//desired outcome

StringBuffer sb = new StringBuffer();
sb.append("test");
sb.append("mlm");

--------------------------

String targeted =  "test" ;
String plainString ="aaatestzzztest";

//desired outcome

StringBuffer sb = new StringBuffer();
sb.append("aaa");
sb.append("test");
sb.append("zzz");
sb.append("test");
有什么简单的方法吗

我想我需要使用一个正则表达式,比如:

Pattern pattern = Pattern.compile(".*"+targeted +".*");
Matcher matcher = pattern.matcher(text);
if (matcher.find())
{
   System.out.println(matcher.group(1));
}
但是我不知道如何提取字符串并按相同的顺序添加它们

我之所以这样做,是因为
纯字符串
将使用POI添加到Excel单元格中,但我需要为目标字符串添加字体颜色

例如:

XSSFRichTextString richString = new XSSFRichTextString();
richString.append("azerty");
richString.append("test", highlightFont);
richString.append("qwerty");
cell.setCellValue(richString);  

非常感谢

模式匹配器可能有点太多了

只需对单词进行拆分,然后在生成的数组上进行for循环

例子
publicstaticvoidmain(字符串[]args){
String targeted=“test”;
String plainString=“azertytestqwerty”;
String[]result=plainString.split(目标);
StringBuffer sb=新的StringBuffer();
for(int i=0;i
这是方法,您可以尝试任何组合

public String extractMultiples(String plainString, String targeted) {
    StringBuffer sb = new StringBuffer();

    // split covers all occurrences in the beginning;empty element, and in
    // the middle
    String[] result = plainString.split(targeted);
    for (int i = 0; i < result.length; i++) {
        sb.append(result[i]);
        if (i < result.length - 1)// not the last one
            sb.append(targeted);
    }

    // in the end
    if (plainString.endsWith(targeted))
        sb.append(targeted);
    return sb.toString();
}
公共字符串提取倍数(字符串纯字符串,目标字符串){
StringBuffer sb=新的StringBuffer();
//“拆分”覆盖开头、空元素和中的所有引用
//中间
String[]result=plainString.split(目标);
for(int i=0;i
像这样添加到StringBuffer的目的是什么?如果你正在“重建整个字符串”,那么仅仅做
StringBuffer sb=newstringbuffer(plainString)有什么错@Dustin Ryan Roepsch。后期编辑更精确。非常感谢:)明白了!这更有意义:)如果您想对目标执行一些特殊操作,只需检查结果[i]是否等于(目标)@ΦXoce웃 Пepeúpa,您好,非常感谢您的回答,但目标字符串可以位于字符串中的任何位置,因此更复杂:/。我想我需要
indexof
子字符串之间的一些良好组合。请看我更新的问题。谢谢:)您好,非常感谢您的回答,但是目标字符串可以位于字符串中的任何位置,因此更复杂:/。请看我更新的问题。谢谢:)谢谢你,你真的帮了我很多。我不知道该怎么感谢你。我在努力奋斗。还有一种情况,当纯字符串仅由targetTestString组成时。缓冲区将添加targetTestString 2times@ulquiorra事实上它不会,因为结果是空的,它会在最后一节添加一次,我刚刚测试过。hh说谢谢的最好方式是投票选出答案,并称之为正确:),祝你好运。是的,事实上,我只是忘了包括区分大小写的管理。现在它工作了。非常感谢你,伙计:)
public String extractMultiples(String plainString, String targeted) {
    StringBuffer sb = new StringBuffer();

    // split covers all occurrences in the beginning;empty element, and in
    // the middle
    String[] result = plainString.split(targeted);
    for (int i = 0; i < result.length; i++) {
        sb.append(result[i]);
        if (i < result.length - 1)// not the last one
            sb.append(targeted);
    }

    // in the end
    if (plainString.endsWith(targeted))
        sb.append(targeted);
    return sb.toString();
}