После извлечения word, как получить оставшуюся часть?

#java #android #regex #string #substring

#java #Android #регулярное выражение #строка #подстрока

Вопрос:

Привет, у меня есть следующая строка

 String mytext="Hi I <am> John (Cena)";
  

Теперь, что я пытаюсь сделать, я хочу отобразить

‘<am>’ выделено жирным шрифтом, а ‘Cena‘ — синим цветом.

Я могу извлечь эти слова, но оставшуюся часть, такую как «Привет, я Джон»

Как это можно извлечь? Я не могу найти решение.

 txttemps=(TextView)findViewById(R.id.txt_temps);

List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("\((.*?)\)");
Matcher regexMatcher = regex.matcher(mytext);

while (regexMatcher.find()) {//Finds Matching Pattern in String
    matchList.add(regexMatcher.group(1));//Fetching Group from String

}

for(String str:matchList) {
    System.out.println(str);

    colortext=str;
}

Pattern p = Pattern.compile("\<(.*?)\>");
Matcher m = p.matcher(mytext);
while(m.find())
{
    System.out.println(m.group(1));
    //is your string. do what you want
    boldtext=m.group(1);

}
  

Комментарии:

1. почему вы не используете метод substring для извлечения требуемой части

2. @khimji что такое точная строка? включает ли это ‘<‘ и ‘>’ с am?

3. Я бы предложил использовать split метод в классе string и использовать Span API, который представляет Android, для слегка стилизованных текстовых представлений. Вы также могли бы использовать various TextView с надлежащими ограничениями для аналогичного поведения, и проблема сводилась бы к поиску слов и использованию их в правильном TextView

4. Строка @OnkarMusale будет динамической, поэтому мы не можем предсказать,

5. @Jabongg да, строка будет содержать меньше и больше символов в строке

Ответ №1:

Пожалуйста, используйте приведенный ниже код

 String mytext="Hi I <am> John (Cena)";
Pattern ptn = Pattern.compile("\s ");
Matcher mtch = ptn.matcher(mytext);
mytext = mtch.replaceAll(",");
System.out.println("Array" mytext.split(",")[0]);//[1][2] to get next elements in array
  

Ответ №2:

 SpannableStringBuilder str = new SpannableStringBuilder("Hi I am John Cena");
str.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD),5,6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new ForegroundColorSpan(Color.BLUE), 13, 16, 0); 
TextView tv=new TextView(context);
tv.setText(str);
  

Проверьте эту ссылку для получения дополнительных примеров

Комментарии:

1. Что, если строка будет отличаться? будет ли это решение работать?

2. Только если вы будете динамически определять положение строк, которые хотите настроить.

3. 1 строка может быть: Это <мой> мир. 2 Строка может быть: Это мой <мир>. Теперь я разделяюсь, но для второго сценария он выдает Arrayoutofbounds pastebin.com/gxZZEFB7

4. Если все время в мире вы хотите выделить жирным шрифтом или изменить его цвет, это одно и то же, вы могли бы искать его позицию в вашей строке.

5. Например: String text = "This is my world" String match = "world" int position = text.indexOf(match); Вы увидите, что позиция будет равна 8, и вы знаете, что ‘world’ имеет длину 5, поэтому приведенный выше код становится : SpannableStringBuilder str = new SpannableStringBuilder("Hi I am John Cena"); str.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD),position,position 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);