My string wäre wie:Split String Worte nach einem bestimmten Symbol in Java
String s = "args: val args1: val1 args2: val3 /*...argsn: valn*/";
///*...argsn: valn*/ means that the string may contain n number of args and vals
Wo: args os Wort oder eine Kombination von Wörtern i bereits val wissen kann ein einzelnes Wort oder eine sein Volltext, der Wörter und Symbole wie enthalten „:“ oder „“ ... Was ich tun möchte, ist Anzeige für jede gegebene ‚args‘ display es ist ‚val‘
Hier ist, was ich versucht:
public class Main {
public static void main(String[] args) {
String s = "arg1: val1 arg2: val2 arg3: va:l3";
String[] rawPairs = s.replace(": ", ":").split(" ");
Map<String, String> argsMap = Arrays.stream(rawPairs).collect(toMap(pair -> pair.substring(0, pair.indexOf(":")), pair -> pair.substring(pair.indexOf(":") + 1)));
System.out.println(argsMap.get("arg3"));
System.out.println(argsMap.get("arg5"));
}
}
funktioniert dies, wenn die ‚val‘ ein einzelnes Wort ist, aber wenn es ein Text ist bekomme ich diesen Fehler für diesen Eingang:
String s = "arg1: val1 arg2: val2 is a sentence arg3: va:l3";
Fehler:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1967)
at mainTest.lambda$main$0(mainTest.java:306)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at mainTest.main(mainTest.java:306)
Sie brauchen ein anderes Trennzeichen vielleicht ... etwas, das nicht in der Arg oder Val auftreten darf. – Lino
müssten Sie wählen, welches Format die Zeichenfolge genau hätte. Sie haben 2 verschiedene Beispiele – XtremeBaumer
noch nicht vollständig gewählt ... erste Zeichenfolge, die Sie zeigen, ist "String s =" args: val args1: val1 args2: val3/*.. .argsn: valn */";' dann zeigen Sie 'String s = "arg1: val1 arg2: val2 arg3: va: l3"; und als letztes zeigt man 'String s =" arg1: val1 arg2: val2 ist ein Satz arg3: va: l3 ";'. Das sind 3 völlig verschiedene Fälle. wähle 1 und wir könnten etwas ausarbeiten – XtremeBaumer