#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, для слегка стилизованных текстовых представлений. Вы также могли бы использовать variousTextView
с надлежащими ограничениями для аналогичного поведения, и проблема сводилась бы к поиску слов и использованию их в правильном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);