2017-02-17 11 views
1

Я очень новичок в java. Я хочу разбить строку следующим образом. предположим, я дал вход строку как образец 1 jayesh =10 vyas =13 harshit=10; and so on в качестве входного образца 2: harsh=2, vyas=5;разделяет строки в java по-разному

теперь я хочу, чтобы хранить jayesh, vyas, harshit from sample 1 and harsh , vyas from sample 2(all this type of strings which are just before the assignment operator) в строку или массив символов.

так может кто-нибудь рассказать мне об этом, как это сделать в java. Я знаю о методе split в java, но в этом случае есть несколько строк, которые я должен хранить.

+0

Вы можете использовать раскол(), но вы должны будете затем разделить каждый результат. –

+0

Какая проблема с 'String.split (regex)' у вас есть? Как структурируются отдельные элементы? Всегда ли это 'name = numeric_value name = numeric_value ...' или они разделены ';', существуют ли нечисловые значения и т. Д.?В качестве альтернативы 'split()' вы можете напрямую использовать 'Pattern' и' Matcher' и сопоставлять и извлекать слова перед '='. – Thomas

ответ

4

вы можете использовать =\\d+;? регулярных выражения

=\\d+;? матча = и столько же цифры с ; в качестве дополнительного

String s="jayesh =10 vyas =13 harshit=10;"; 
    String[] ss=s.split("=\\d+;?"); 
    System.out.println(Arrays.toString(ss)); 

выхода

[jayesh , vyas , harshit] 

Чтобы продлить его дальше, вы можете использовать \\s*=\\d+[,;]?\\s*

\\s*: поиск нуля или более пробелов

[,;]? соответствует любому символу упоминания в списке в качестве дополнительного

, но если вы хотите избежать любого специального символа после цифр используйте

\\s*=\\d+\\W*" :

\\s*=: соответствует нулю или больше мест и = характер

\\d+: матч еще один или цифр

\W*: соответствует нулю или больше несловообразующие символы, кроме a-zA-z0-9_

String s="harsh=2, vyas=5; vyas=5"; 
    String s2 ="jayesh =10 vyas=13 harshit=10;"; 
    String regex="\\s*=\\d+\\W*"; 
    String[] ss=s.split(regex); 
    String[] ss2=s2.split(regex); 
    System.out.println(Arrays.toString(ss)); 
    System.out.println(Arrays.toString(ss2)); 

выхода

[harsh, vyas, vyas] 
[jayesh, vyas, harshit] 

Примечания: Space после Добавлен , для formatt используя функцию Arrays.toString, хотя в массивах ss и ss2 нет места.

Для Hashset использования

Set<String> mySet = new HashSet<String>(Arrays.asList(ss)); 
+0

Добавьте небольшое выражение в выражение, и он должен быть в порядке ... если вход не может выглядеть по-другому, например. как недавно добавленный образец 2, который содержит запятую. – Thomas

+0

Могу ли я сохранить эти строки в hashset или установить, чтобы избежать дублирования ??? предположим, что если у меня есть две одинаковые строки, имя jayesh и другое также jayesh, тогда я хочу сохранить только одну строку. –

+0

@JayeshVyas да, вы можете это сделать 'Set mySet = new HashSet (Arrays.asList (ss));' и для дальнейшего чтения вы можете пройти через [oracle regex] (https://docs.oracle.com/ javase/tutorial/essential/regex /) и попробуйте «классы символов» и «предопределенные классы символов» –

0

вы можете использовать replaceAll(), чтобы получить ожидаемые результаты

String stringToSearch = "jayesh =10 vyas =13 harshit=10;"; 

stringToSearch = stringToSearch.replaceAll("=\\d+;?",""); 

System.out.println(stringToSearch); 

output: 
jayesh vyas harshit 
+0

OP, я хочу хранить 'jayesh, vyas, .... все эти типы строк, которые находятся непосредственно перед оператором присваивания) в' string или char array' и приятное регулярное выражение –

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

  • Нет связанных вопросов^_^