Функция Split возвращает ошибку <Unmatched closed ...> - PullRequest
1 голос
/ 12 марта 2012

Отличается ли 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);

Или у вас есть другое решение для этого?

Ответы [ 2 ]

3 голосов
/ 12 марта 2012

Отличается ли функция разделения C # от Java?

Да .

Версия C # 1009 * принимает один строковый маркердля разделения цели string.

Версия Java принимает регулярное выражение .( не является допустимым регулярным выражением, и поэтому вызов split() завершается неудачей.

Чтобы получить необходимую функциональность, вы можете экранировать символ (, например, так:

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

Обратите внимание на двойную косую черту, чтобы учесть тот факт, что \ является как Java, так и escape-символом регулярного выражения.

1 голос
/ 12 марта 2012

Обычно это можно сделать с помощью регулярного выражения замены / поиска.

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; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...