Java разбирает строку с большим количеством пробелов - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть строка с несколькими пробелами, но когда я использую токенизатор, он разбивает ее на все эти пробелы.Мне нужно, чтобы токены содержали эти пробелы.Как я могу использовать StringTokenizer для возврата значений с токенами, на которые я делю?

Ответы [ 4 ]

2 голосов
/ 15 февраля 2012

В документах для StringTokenizer вы заметите, что рекомендуется не использовать его для какого-либо нового кода и что String.split(regex) - это то, что вам нужно

String foo = "this is      some  data      in   a string";
String[] bar = foo.split("\\s+");

Изменить, чтобы добавить: Или, если у вас есть большие потребности, чем простое разбиение, используйте классы Pattern и Matcher для более сложного сопоставления и извлечения регулярных выражений.

Снова отредактируйте: Если вы хотите сохранить свое пространство, действительно полезно знать немного о регулярных выражениях:

String[] bar = foo.split("\\b+");

Это разделит границы слов, сохраняяпробел между каждым словом как String;

public static void main( String[] args )
{
    String foo = "this is      some  data      in   a string";
    String[] bar = foo.split("\\b");
    for (String s : bar)
    {
        System.out.print(s);
        if (s.matches("^\\s+$"))
        {
            System.out.println("\t<< " + s.length() + " spaces");
        }
        else
        {
            System.out.println();
        }
    }
}

Вывод:

this
        << 1 spaces
is
        << 6 spaces
some
        << 2 spaces
data
        << 6 spaces
in
        << 3 spaces
a
        << 1 spaces
string
1 голос
/ 04 ноября 2012

Думаю, будет хорошо, если вы сначала воспользуетесь первой функцией replaceAll, чтобы заменить все несколько пробелов одним пробелом, а затем выполните токенизацию с использованием функции split.

1 голос
/ 15 февраля 2012

Используйте String.split("\\s+") вместо StringTokenizer.

Обратите внимание, что при этом будут извлечены только непробельные символы , разделенные хотя бы одним пробельным символом, если вы хотите использовать начальный / конечный символПробельные символы, включенные в непробельные символы, которые будут совершенно другим решением!

Это требование не ясно из вашего исходного вопроса, и есть ожидание редактирования, которое пытается уточнить его.

StringTokenizer почти во всех необдуманных случаях - неподходящий инструмент для работы.

1 голос
/ 15 февраля 2012

Похоже, вам может понадобиться использовать регулярные выражения (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/package-summary.html) вместо StringTokenizer.

...