Split Function返回<unmatched closing ... =“”> error </unmatched>

时间:2012-03-12 02:01:35

标签: java string

C# Split FunctionJava不同吗?当我尝试使用分隔符拆分字符串时,为什么会出现此错误?

Exception in thread "AWT-EventQueue-0" java.util.regex.PatternSyntaxException: Unmatched closing ')'
)
    at java.util.regex.Pattern.error(Pattern.java:1924)
    at java.util.regex.Pattern.compile(Pattern.java:1669)
    at java.util.regex.Pattern.<init>(Pattern.java:1337)
    at java.util.regex.Pattern.compile(Pattern.java:1022)
    at java.lang.String.split(String.java:2361)
    at java.lang.String.split(String.java:2403)
... <more stacktrace>

使用此代码:(来自String Split的教程)

private String GetAccountID(String xStr)
{
    String oText = xStr;
    String[] oValA = oText.split(")");
    String[] oValB = oValA[0].split("(");

    return oValB[1]; 
}

示例值:

AccountID sample values:
      (100) Department
      (100A) Budget
      (12-34F) Others

I want to get 100, 100A, 12-34F from the AccountID.

样本用法:

String AccID = GetAccountID(AccountID);

或者您有其他解决方案吗?

2 个答案:

答案 0 :(得分:3)

  

C#Split功能是否与Java不同?

Split()的C#版本接受一个字符串标记,用于拆分目标string

Java版本接受正则表达式(不是有效的正则表达式,因此对split()的调用失败。

要获得所需的功能,您可以像这样转义(字符:

String[] oValA = oText.split("\\(");

请注意双斜杠,以说明\是Java和正则表达式转义字符的事实。

答案 1 :(得分:1)

通常可以通过正则表达式替换/查找。

private String getAccountID(String str)
{
    // ^ start, .* any chars, \\( open parenthesis, ([^)]*) no end parenthesis = $1,
    // \\) end parenthesis, .* $ any chars upto end.

    String accountID = str.replaceFirst("^.*\\(([^)]*)\\).*$", "$1");

    // If no matching, accountID == str.
    return accountID == str ? "" : accountID; 
}