Java: пропустить символы Unicode при чтении файла - PullRequest
1 голос
/ 11 июля 2019

Я читаю текстовый файл, используя приведенный ниже код,

try (BufferedReader br = new BufferedReader(new FileReader(<file.txt>))) {
   for (String line; (line = br.readLine()) != null;) {
      //I want to skip a line with unicode character and continue next line
      if(line.toLowerCase().startsWith("\\u")){
            continue;
         //This is not working because i get the character itself and not the text 
        }
    }
}

Текстовый файл :

enter image description here

Как пропустить все символы Юникода при чтении файла?

Ответы [ 3 ]

0 голосов
/ 12 июля 2019

Все символы в строке являются Unicode. Строка - это подсчитанная последовательность кодовых единиц UTF-16. Под «Юникодом» вы должны понимать также не какой-либо неопределенный набор других наборов символов. Ради аргумента, скажем, ASCII.

Регулярное выражение может иногда быть самым простым выражением требования шаблона:

if (!line.matches("\\p{ASCII}*")) continue;

То есть, если строка состоит не только из какого-либо числа, включая 0 (что означает *) символов "ASCII", тогда продолжайте.

(String.matches ищет совпадение во всей строке, поэтому фактический шаблон регулярного выражения - ^\p{ASCII}*$.)

0 голосов
/ 12 июля 2019

Примерно так может получиться:

for (char c : line.toCharArray()) {
    if (Character.UnicodeBlock.of(c) == Character.UnicodeBlock.BASIC_LATIN) {
        // do something with this character
    }
}

Вы можете использовать это в качестве отправной точки, чтобы либо отбросить каждый неосновной символ, либо отбросить всю строку, если она содержит один неосновный символхарактер.

0 голосов
/ 11 июля 2019

Вы можете пропустить все строки, которые не содержат символов ASCII:

if(Charset.forName("US-ASCII").newEncoder().canEncode(line)){
    continue; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...