Привет, у меня есть следующая строка
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);
}
@khimji что такое точная строка? включает ли он «<» и «>» с am?
Я бы предложил использовать метод split в классе строк и использовать Span API, который Android вводит для небольшого стиля текстовых представлений. Вы также можете использовать различные TextView с соответствующими ограничениями, чтобы иметь аналогичное поведение, и проблема уменьшится, чтобы найти слова и использовать их в правильном TextView
Строка @OnkarMusale будет динамической, поэтому мы не можем предсказать,
@Jabongg да, строка будет содержать символы меньше и больше в строке
@OnkarMusal 1 Строка может быть: Это <мой> мир. 2 Строка может быть: Это мой <мир>. Теперь я разделяю, но для второго сценария он дает Arrayoutofbounds pastebin.com/gxZZEFB7




Пожалуйста, используйте код ниже
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);
Проверьте ссылку это, чтобы увидеть больше примеров.
Что, если строка будет другой? это решение будет работать?
Только если вы динамически узнаете положение строк, которые хотите настроить.
1 строка может быть: Это <мой> мир. 2 Строка может быть: Это мой <мир>. Теперь я разделяю, но для второго сценария он дает Arrayoutofbounds pastebin.com/gxZZEFB7
Если все время мир, который вы хотите выделить жирным шрифтом или изменить его цвет, будет одинаковым, вы можете найти его позицию в своей строке.
Например: 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);
почему вы не используете метод подстроки для извлечения необходимой части