2016-06-14 2 views
2

Мне нужно разбить строку на конкретный String, который может быть размещен в любом месте (может быть многократное появление этой строки одновременно) и восстановить всю строку, добавив выдержки в нечто вроде 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)); 
} 

Но тогда я не знаю, как извлечь строки и добавить их в таком же порядке

Причина, почему я это делаю это потому что plainString будет добавлен в ячейку Excel с помощью POI, но мне нужно добавить цвет шрифта для целевой строки.

Пример:

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

Большое спасибо

+0

Какова цель добавления в StringBuffer, как это? Если вы «реконструируете всю строку», что-то не так с тобой 'StringBuffer sb = new StringBuffer (plainString);' – dustinroepsch

+0

@Dustin Ryan-Roepsch. Сообщение отредактировано с дополнительными комментариями. Большое спасибо :) – ulquiorra

+0

Gotcha! Это имеет смысл :) – dustinroepsch

ответ

2

Это метод, вы можете попробовать любую комбинацию.

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(); 
} 
+0

привет большое спасибо за ваш ответ, но целенаправленная строка может быть где угодно в String, так что это сложнее: /. См. Мой обновленный вопрос. Спасибо :) – ulquiorra

+0

Спасибо, человек, ты мне очень помог. Я не знаю, как поблагодарить вас. я изо всех сил старался. Еще один случай, когда plainString состоит только с targetString. Буфер добавит targetString 2 раза – ulquiorra

+0

@ulquiorra На самом деле это не так, потому что результат пуст, он добавит его один раз в конце раздела, я только что проверил это. hh и лучший способ сказать спасибо - проголосовать за ответ и называть его правильным :), удачи. – TiMr

2

Pattern и Сличитель, может быть, немного слишком много ...

просто сделать разделение на слова и затем сделайте петлю для результирующего массива ...

Пример

public static void main(String[] args) { 
    String targeted = "test"; 
    String plainString = "azertytestqwerty"; 
    String[] result = plainString.split(targeted); 
    StringBuffer sb = new StringBuffer(); 
    for (int i = 0; i < result.length; i++) { 
     sb.append(result[i]); 
    } 
} 
+0

, и если вы хотите сделать что-то особенное с целью, вы просто проверите, будет ли результат [i] .equals (target); – dustinroepsch

+0

@ ΦXoce 웃 Пepeúpa, привет большое спасибо за ваш ответ, но целенаправленная строка может быть где угодно в String, так что это сложнее: /. Я думаю, мне нужны хорошие комбинации между '' indexof'' и '' подстрокой''. См. Мой обновленный вопрос. Спасибо :) – ulquiorra