Как получить длину символа Unicode вместе с пробелом в Java

1

Мне нужно найти длину моей строки "பாரதீய ஜனதா இளைஞர் அணி தலைவர் அனுராக்சிங் தாகூர் எம்.பி. நேற்று தேர்தல் ஆணையர் வி.சம்பத்". Я получил длину строки как 45, но я ожидаю, что длина строки будет равна 59. Здесь мне нужно добавить условие регулярного выражения для пробелов и точек (.). Мой код

import java.util.*;
import java.lang.*;
import java.util.regex.*;

class UnicodeLength
{
public static void main (String[] args)
{
    String s="பாரதீய ஜனதா இளைஞர் அணி தலைவர் அனுராக்சிங் தாகூர் எம்பி நேற்று தேர்தல் ஆணையர் விசம்பத்";
    List<String> characters=new ArrayList<String>();
    Pattern pat = Pattern.compile("\\p{L}\\p{M}*");
    Matcher matcher = pat.matcher(s);
    while (matcher.find()) {
        characters.add(matcher.group());            
    }

    // Test if we have the right characters and length
    System.out.println(characters);
    System.out.println("String length: " + characters.size());

}

}

  • 2
    Можете ли вы объяснить, почему вы думаете, что это должно быть 59? (Я, очевидно, не знаю этого языка.)
  • 2
    1 b 2 r 3 огонь 4 y 5 6 j 7 n 8 d 9 10 e 11 d 12 n 13 d 14 15 a 16 d 17 18 d 19 l 20 d 21 r 22 23 a 24 n 25 r 26 c 27 c 28 29 29 30 Da 31 Go 32 33 33 34 35 35 36 36. 37 B 38. 39 40 N 41 42 42 43 44 45 46 46 47 47 48 48 49 50 50 51 51 52 52 53 54 V 55. 56 ч 57 й 58 р 59 й
Показать ещё 2 комментария
Теги:
string
unicode

1 ответ

1

Следующий код работал для меня. Было исправлено три вопроса:

  1. Я добавил проверку на пробелы в ваше регулярное выражение.
  2. Я добавил чек для пунктуации для вашего регулярного выражения.
  3. Я вставил строку из вашего комментария в строку в вашем коде. Они были не то же самое!

Здесь код:

public static void main(String[] args) {
    String s = "பாரதீய ஜனதா இளைஞர் அணி தலைவர் அனுராக்சிங் தாகூர் எம்.பி. நேற்று தேர்தல் ஆணையர் வி.சம்பத்";
    List<String> characters = new ArrayList<String>();
    Pattern pat = Pattern.compile("\\p{P}|\\p{L}\\p{M}*| ");
    Matcher matcher = pat.matcher(s);
    while (matcher.find()) {
        characters.add(matcher.group());
    }
    // Test if we have the right characters and length
    int i = 1;
    for (String character : characters) {
        System.out.println(String.format("%d = [%s]", i++, character));
    }
    System.out.println("Characters Size: " + characters.size());
}

Возможно, стоит отметить, что ваш код очень похож на решение для этого SO. Один комментарий к этому решению, в частности, заставил меня обнаружить недостающую проверку пунктуации в вашем коде и позволил мне заметить, что строка из вашего комментария не соответствует строке в вашем коде.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню