2015-06-29 2 views
2

В настоящее время я работаю над классом, который извлекает определенные буквы из огромного текстового файла, и я не могу создать правильный шаблон для его отслеживания того, что я хочу. Узор я использую:Как я могу написать этот шаблон?

Pattern p = Pattern.compile("'[A-Z ]'|'[.]'"); 

При поиске через что-то вроде этого :('L', 'O', '', 'B', 'I') , мои Сличитель возвращает «L '' O''B'I '(я использую его для хранения каждого совпадения в StringBuilder), но не возвращает пробел, и мне это нужно.

Приносим извинения за недостатки презентации, но я все еще привык задавать вопросы здесь.

EDIT: Я хочу получить ответ на кроссворд. У меня есть класс, который получает код из кроссворда и сохраняет его в текстовом файле. После этого, я хочу, чтобы запустить этот код, чтобы получить ответы, которые организованы так:

L[0] = new Array('S','O','L','O','M','I','L','L','O','','B','I','B','L','I','O','','C','A','O'); 
L[1] = new Array('A','R','T','R','O','S','E','','D','I','N','A','M','I','T','E','','E','U',''); 
L[2] = new Array('R','C','P','','R','I','C','A','','','','','','','','','','','',''); 
L[3] = new Array('R','A','','','A','S','A','','A','N','O','R','M','L','','P','U','T','I','N'); 
L[4] = new Array('O','','','','T','','','','','','','','','','','','','','',''); 
L[5] = new Array('','','','','O','','','','','','','','','','','','','','',''); 

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

SOLOMILLOBIBLIOCAOARTROSEDINAMITEEURCPRICARAASAANORMLPUTINOTO` 

после того, как я удалил все лишние ненужные символы. Что мне нужно, чтобы вернуть это:

SOLOMILLO BIBLIO CAO ARTROSE DINAMITE EU RCP RICA RA ASA ANORML PUTIN O T O 
+3

Возможно, вы можете лучше определить, чего вы пытаетесь достичь? _certain letters_ довольно расплывчато. –

+0

Можете ли вы показать нам, как вы используете этот шаблон? BTW ''[A-Z]' | '[.]'' Можно переписать в возможно более читаемый '' [A-Z.] ''. Кроме того, вход с вашего вопроса, похоже, не имеет пространства, окруженного '' '. – Pshemo

+0

Можете ли вы привести пример текста и ожидаемый результат? – Andreas

ответ

1

Вы можете

  • заменить пустой '' с ' ' (с пространством внутри) `
  • добавить все символы, окруженными ' (включая пробел) до StringBuilder (похоже, у вас уже есть этот шаг, также '([A-Z ])', вероятно, здесь будет хорошо).
  • новообращенный строитель в строку
  • обрезать, чтобы удалить пробелы в начале и в конце
  • заменить два или более пробелов одним пробелом (replaceAll("\\s{2,}"," ") может быть полезным).

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

Demo

+0

Спасибо, теперь он работает, но, видимо, способ удаления ненужных символов также удаляет пробелы. Я удаляю их следующим образом: String [] list = s.split ("[']"). появляется какая-либо идея о том, как создавать пробелы? – Azerogg

+0

@Azerogg Я не совсем уверен, чего вы хотите достичь с помощью этого раскола. Во всяком случае, я обновил свой ответ ссылкой на пример кода. – Pshemo

+0

Прошу прощения, я этого не заметил раньше. Благодарю вас. – Azerogg

0

Похоже, вы немного запутался с тем, что вы пытаетесь искать. С одной стороны, вы хотите найти A-Z или пробел. С другой стороны, вы хотите найти любого персонажа. Ваша вторая часть условия включает в себя первую. Вы можете использовать следующее, чтобы получить то, что вы после:

Pattern p = Pattern.compile("'.*?'");