2014-12-31 2 views
-1

Я использую класс Scanner Java разграничить строкуКак Разобрать файл Использование Разделитель сканера

Вот моя строка

%22locations%22:[{%22linkId%22:21737516,%22latLng%22:{%22lat%22:12.9219,%22lng%22:77.56022},%22type%22:%22s%22}, 

{%22linkId%22:21741609,%22latLng%22:{%22lat%22:12.921509,%22lng%22:77.49382},%22type%22:%22s%22}, 

{%22linkId%22:18632091,%22latLng%22:{%22lat%22:12.904157,%22lng%22:77.470489},%22type%22:%22v%22}, 

{%22linkId%22:76684742,%22latLng%22:{%22lat%22:12.88959,%22lng%22:77.45314},%22type%22:%22s%22} 

Я хочу, чтобы выход в

locations:[{latLng:{lat:12.9219,lng:77.56022},type:'s'}, 

{latLng:{lat:12.921509,lng:77.49382},type:'s'}, 

{latLng:{lat:12.904157,lng:77.470489},type:'v'}, 

{latLng:{lat:12.88959,lng:77.45314},type:'s'} 
] 

вот мой код

s.useDelimiter("%22|linkId:\\d+,"); 

Я не являюсь t можно удалить linkid:integer и добавить одинарные кавычки около type значение, например. 's' вместо s.

ответ

0

Ваш разделитель не может принять linkId:\\d+, потому что ваша строка не содержит продолжающихся данных, таких как linkId:21741609, но linkId%22:21741609.

Таким образом, вы должны использовать

s.useDelimiter("%22|linkId%22:\\d+,"); 

Но изменение s к 's' невозможно с помощью сканера, так как сканер может быть использован только для чтения (или пропустить некоторые) данные, а не добавлять его. Лучшим решением было бы прочитать всю вашу строку, а затем изменить ее содержимое примерно как .replaceAll("type:(\\w)", "type:'$1'") как mentioned by @geert3.

+0

Нет Я использую механизм разбора файла не связанных с любым URL-адресом – Rakesh

+0

@ Rakesh Я обновил свой ответ. Но похоже, что вы используете неправильные инструменты для решения своей проблемы. Возможно, подумайте над добавлением дополнительной информации о том, что вы пытаетесь сделать и почему. – Pshemo

+0

Да, спасибо! Я должен пойти для строкового reaplcement, Но как можно заменить String с помощью файлов? – Rakesh

1

Нет необходимости в Scanner, просто использовать String.replaceAll:

Сначала удалите все %22, затем удалить все linkId:..., , наконец, добавить кавычки значения типа:

String output = input.replaceAll("%22", "") 
         .replaceAll("linkId:\\d+,", "") 
         .replaceAll("type:(.)", "type:'$1'"); 
+0

Хорошо! как работать с java-сканером Delimiter, я использую файл s = новый сканер (новый BufferedReader (новый FileReader («Code1.txt»))); PrintWriter outfile = new PrintWriter («MyFile.txt»); s.useDelimiter ("% 22 |: \\ d +, | linkId"); while (s.hasNext()) { outfile.print (s.next()); } outfile.close(); – Rakesh

+0

Сканер должен «разбор» или токенизировать строки. Ваш вопрос: «Я хочу, чтобы результат был ...»: для этого вы не можете использовать Scanner, и мой ответ - это то, что вам нужно. Если ваш вопрос «как я могу найти определенные значения в этом сообщении JSON», то это совсем другой вопрос. Я рекомендую вам взглянуть на этот вопрос: https: // stackoverflow.com/questions/2591098/how-to-parse-json-in-java – geert3

+0

Обратите внимание, что вам нужно «replaceAll» («% 22», «\» »)' сделать этот «полезный» JSON. – geert3

Смежные вопросы