2009-06-16 2 views
1

Мне нужно передать некоторый код C# на Java, и у меня возникли проблемы с преобразованием команды разделения строк.C# Regex Split To Java Pattern split

Хотя фактическое регулярное выражение по-прежнему правильное, при разбиении на C# токены регулярных выражений являются частью результирующей строки [], но в Java токены регулярных выражений удаляются.

Что является самым простым способом для хранения токенов с разделом?

Вот пример C# код, который работает так, как я хочу это:

using System; 

using System.Text.RegularExpressions; 

class Program 
{ 
    static void Main() 
    { 
     String[] values = Regex.Split("5+10", @"([\+\-\*\(\)\^\\/])"); 

     foreach (String value in values) 
      Console.WriteLine(value); 
    } 
} 

Produces: 
5 
+ 
10 
+4

Можете ли вы дать нам пример ввода и регулярное выражение вы используете, чтобы разделить? –

+0

Как правило, я уверен, что внутри класса символов (квадратные скобки, «[]») вам не нужно столько обратных косых черт. Может ли кто-нибудь еще подтвердить? –

+0

Мне, вероятно, не нужна обратная косая черта, но я не писал регулярное выражение, я просто портирую код. – user108088

ответ

1

Я не знаю, как это работает на C#, но для его выполнения на Java вам придется приблизиться. Посмотрите, как это делает this code:

public String[] split(String text) { 
    if (text == null) { 
     text = ""; 
    } 

    int last_match = 0; 
    LinkedList<String> splitted = new LinkedList<String>(); 

    Matcher m = this.pattern.matcher(text); 

    // Iterate trough each match 
    while (m.find()) { 
     // Text since last match 
     splitted.add(text.substring(last_match,m.start())); 

     // The delimiter itself 
     if (this.keep_delimiters) { 
      splitted.add(m.group()); 
     } 

     last_match = m.end(); 
    } 
    // Trailing text 
    splitted.add(text.substring(last_match)); 

    return splitted.toArray(new String[splitted.size()]); 
} 
1

Это потому, что вы захватывая раздвоение маркер. C# воспринимает это как подсказку о том, что вы хотите сохранить сам токен в качестве члена результирующего массива. Java не поддерживает это.

+0

Попробуйте следующее: using System; с использованием System.Text.RegularExpressions; класс Программа { статической силы Main() { String [] = значение Regex.Split ("5 + 10", @ "([\ + \\ * \ (\) \^\\ /]) "); foreach (значение строки в значениях) Console.WriteLine (значение); } } – user108088