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

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

String mytext = "Hi I <am> John (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);

}

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

Onkar Musale 28.03.2019 10:45

@khimji что такое точная строка? включает ли он «<» и «>» с am?

Jabongg 28.03.2019 10:49

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

Some random IT boy 28.03.2019 10:52

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

khimji 28.03.2019 10:54

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

khimji 28.03.2019 10:54

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

khimji 28.03.2019 14:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
61
2

Ответы 2

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

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
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);

Проверьте ссылку это, чтобы увидеть больше примеров.

Что, если строка будет другой? это решение будет работать?

khimji 28.03.2019 11:15

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

Miruna Radu 28.03.2019 11:28

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

khimji 28.03.2019 14:31

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

Miruna Radu 28.03.2019 15:50

Например: String text = "This is my world" String match = "world" int position = text.indexOf(match); Вы увидите, что позиция будет равна 8, и вы знаете, что «мир» имеет длину 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);

Miruna Radu 28.03.2019 15:51

Другие вопросы по теме