C#
Split Function
与Java
不同吗?当我尝试使用分隔符拆分字符串时,为什么会出现此错误?
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);
或者您有其他解决方案吗?
答案 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;
}