在java中查找匹配后的字符串
我对图案有问题。我需要在macapp=和locapp=之后获得valuenumber和text,两个单词之间是&如何做到这一点 字符串温度=http://sedaword.com/app/fr/main.php?macapp=admin22&locapp=30.330345,59.607153; 模式p=Pattern.compile^.*?macapp=.+$&//这是我的问题 匹配器m=p.matchertemp; 如果m.find{ String macapp=String.valueOfm.group1;//输出admin22 String locapp=String.valueOfm.group2;//输出30.330345,59.607153 }在java中查找匹配后的字符串,java,android,xml,Java,Android,Xml,我对图案有问题。我需要在macapp=和locapp=之后获得valuenumber和text,两个单词之间是&如何做到这一点 字符串温度=http://sedaword.com/app/fr/main.php?macapp=admin22&locapp=30.330345,59.607153; 模式p=Pattern.compile^.*?macapp=.+$&//这是我的问题 匹配器m=p.matchertemp; 如果m.find{ String macapp=String.valueOf
您可以这样简单地尝试:
String temp = "http://sedaword.com/app/fr/main.php?macapp=admin22&locapp=30.330345,59.607153";
String[] resultArray = temp.split("macapp=")[1].split("&locapp=");
System.out.println(resultArray[0]); //admin22
System.out.println(resultArray[1]); //30.330345,59.607153
您可以这样简单地尝试:
String temp = "http://sedaword.com/app/fr/main.php?macapp=admin22&locapp=30.330345,59.607153";
String[] resultArray = temp.split("macapp=")[1].split("&locapp=");
System.out.println(resultArray[0]); //admin22
System.out.println(resultArray[1]); //30.330345,59.607153
可以按以下方式更正正则表达式: 字符串url=http://sedaword.com/app/fr/main.php?macapp=admin22&locapp=30.330345,59.607153; 模式p=Pattern.compile ^.\\?macapp=.+&locapp=.+$; 匹配器m=p.matcherurl; 如果m.find{ 字符串macapp=m.group1; 字符串locapp=m.group2; } 但我建议你为此使用一些图书馆。
另请参见和。您可以通过以下方式更正正则表达式: 字符串url=http://sedaword.com/app/fr/main.php?macapp=admin22&locapp=30.330345,59.607153; 模式p=Pattern.compile ^.\\?macapp=.+&locapp=.+$; 匹配器m=p.matcherurl; 如果m.find{ 字符串macapp=m.group1; 字符串locapp=m.group2; } 但我建议你为此使用一些图书馆。
另请参见和另一个更通用的选项是使用Java8的流并收集映射中的所有键值对
String url = "http://sedaword.com/app/fr/main.php?macapp=admin22&locapp=30.330345,59.607153";
url = url.substring( url.indexOf( "main.php" ) + "main.php".length() + 1 ); // substring after main.php
Map<String,String> map = Arrays.stream( url.split( "&" ) ) // split on &
.map( str -> str.split( "=" ) ) // split on =
.collect( Collectors.toMap( arr -> arr[ 0 ], arr2 -> arr2[ 1 ] ) ); // collect to map
for ( Map.Entry<String,String> entry : map.entrySet() ) {
System.out.println( String.format( "Key=%s, value=%s", entry.getKey(), entry.getValue() ) );
}
另一个更通用的选项是使用Java8的流并收集映射中的所有键值对
String url = "http://sedaword.com/app/fr/main.php?macapp=admin22&locapp=30.330345,59.607153";
url = url.substring( url.indexOf( "main.php" ) + "main.php".length() + 1 ); // substring after main.php
Map<String,String> map = Arrays.stream( url.split( "&" ) ) // split on &
.map( str -> str.split( "=" ) ) // split on =
.collect( Collectors.toMap( arr -> arr[ 0 ], arr2 -> arr2[ 1 ] ) ); // collect to map
for ( Map.Entry<String,String> entry : map.entrySet() ) {
System.out.println( String.format( "Key=%s, value=%s", entry.getKey(), entry.getValue() ) );
}
我认为这个技巧是一个不情愿的量词,它只需要第一个符号:.+?&。撇开$,我认为这会带来麻烦。我认为这是一个不情愿的量词,它只会占用第一个符号:.+?&。撇开美元不谈,我认为这会给那里带来麻烦。