#java #string #split
#java #строка #расколотый #разделение
Вопрос:
Я пытаюсь разделить строку в формате, подобном этому :
"abc=cde,dfe=lk,f,sss=f,d,s"
Я хотел бы восстановить эти значения на карте, используя первый набор символов в качестве ключа, а второй — в качестве значения.
Например
- ключ:
abc
, значение:cde
- ключ:
dfe
, значение:lk,f
- ключ:
sss
, значение:f,d,s
Итак, разделяем эти значения для последнего вхождения «,».
Есть идеи о том, как это сделать?
Я пробовал с регулярным выражением и Stringtokenizer, но мне не удается восстановить только последнее вхождение «,»
Комментарии:
1. Пожалуйста, вставьте соответствующий раздел кода в свой вопрос, чтобы другие могли определить, в чем именно заключается проблема.
2. Вы могли бы разделить строку с помощью split(«,»), чтобы получить группы, а затем взаимодействовать с ними для разделения («=»).
Ответ №1:
Вы могли бы использовать следующее регулярное выражение (возможно, его можно оптимизировать):
,(?=(?:(?!,).)*=)
(см. в регулярном выражении 101)
Это соответствует a, ,
которое не имеет последующего ,
до следующего =
.
Комментарии:
1. @Marconno : Вы правы. Голосование за. Я использовал ту же технику.
2. @Cetriolo нет проблем. Если это решило ваш вопрос, пожалуйста, отметьте этот или один из других ответов как «Принятый».
Ответ №2:
Для этого вам нужно использовать регулярное выражение.
Полный код :
public class Test {
public static void main(String args[]) {
String input = "abc=cde,dfe=lk,f,sss=f,d,s";
String[] arrOfStr = input.split(",(?=(?:(?!,).)*=)");
HashMap<String, String> properties = new HashMap<String, String>();
for(int i=0;i<arrOfStr.length;i ) {
String[] temp = arrOfStr[i].split("=");
properties.put(temp[0], temp[1]);
}
System.out.println("Input String : " input);
System.out.println("nFinal properties : ");
properties.entrySet().forEach(entry->{
System.out.println("key = " entry.getKey() " :: value = " entry.getValue());
});
}
}
Вывод :
Input String : abc=cde,dfe=lk,f,sss=f,d,s
Final properties :
key = dfe :: value = lk,f
key = sss :: value = f,d,s
key = abc :: value = cde
Ответ №3:
Полный код :
public class Test {
public static void main(String args[]) {
String text = "abc=cde,dfe=lk,f,sss=f,d,s";
String[] parts = text.split(",");
Map<String, String> map = new LinkedHashMap<>();
String key = null;
StringBuilder value = new StringBuilder();
for (int i = 0; i < parts.length; i ) {
if (parts[i].contains("=")) {
if (key != null) {
map.put(key, value.toString());
value.setLength(0);
}
String[] innerParts = parts[i].split("=");
key = innerParts[0];
value.append(innerParts[1]);
} else {
value.append(',').append(parts[i]);
}
}
map.put(key, value.toString());
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry);
}
}
}
Выходной сигнал :
АВС=ЦРП
dfe=lk,f
sss=f,d,s