Java 从包含特殊字符的字符串中提取子字符串

Java 从包含特殊字符的字符串中提取子字符串,java,regex,Java,Regex,从以下给定字符串中提取“year=2017”和“taxType=RE”的最佳方法是什么 href="/property/33951?year=2017&taxType=RE" 也许您可以使用这个正则表达式,它可以匹配两个组,一个是年份=之后的一个或多个degits,第二个是&taxType=之后的一个或多个字母: Java演示版 String str = "/property/33951?year=2017&taxType=RE"; Pattern pattern = Patt

从以下给定字符串中提取
“year=2017”
“taxType=RE”
的最佳方法是什么

href="/property/33951?year=2017&taxType=RE"

也许您可以使用这个正则表达式,它可以匹配两个组,一个是
年份=
之后的一个或多个degits,第二个是
&taxType=
之后的一个或多个字母:

Java演示版

String str = "/property/33951?year=2017&taxType=RE";
Pattern pattern = Pattern.compile("(?i)year=(\\d+?)&taxType=([A-Z]+)");
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
    System.out.println("Year = " + matcher.group(1));
    System.out.println("taxType = " + matcher.group(2));
}
输出

Year = 2017
taxType = RE
这是我通常用来获取参数的
(\?\ \&)([^=]+)\=([^&]+)
。 您需要查找组2以获取参数,组3以获取值

根据评论中的要求

String str = "/property/33951?year=2017&taxType=RE";
Pattern pattern = Pattern.compile("(\\?|\\&)([^=]+)=([^&]+)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.println(matcher.group(2) + " = " + matcher.group(3));
}

这应该可以解决问题。

对于android开发:

    Uri uri = Uri.parse("/property/33951?year=2017&taxType=RE");
    String year = uri.getQueryParameter("year");
    String taxType= uri.getQueryParameter("taxType");

您是在寻找这个特定字符串的解决方案还是遵循这个模式的字符串?很好的解释。请提供一个代码样本,以便成为一个“好答案”,感谢及时的解决方案,我感谢。它确实做到了。什么是
Uri
class?标准Java似乎没有。你的意思可能是
android.net.Uri
?如果是,您应该提到它,因为问题没有标记为与android相关。