Строковое действие функции разделения Java странного

Я замечаю странное поведение при использовании split() метод в Java.

У меня есть строка следующим образом: 0|1|2|3|4|5|6|7|8|9|10

String currentString[] = br.readLine().split("\\|");
System.out.println("Length:"+currentString.length);
for(int i=0;i < currentString.length;i++){
     System.out.println(currentString[i]);
}

Это приведет к желаемым результатам:

Length: 11
0
1
2
3
4
5
6
7
8
9
10

Однако, если я получаю строку: 0|1|2|3|4|5|6|7|8||

Я получаю следующие результаты:

Length: 8
0
1
2
3
4
5
6
7
8

Заключительные 2 порожней тары опущена. Мне нужна порожняя тара, которая будет сохранена. Не уверенный, что я делаю неправильно. Я также попытался использовать разделение этим способом также...split("\\|",-1);

но это возвращает всю строку с длиной 1.

Любая справка значительно ценилась бы!

5
задан Matt Ball 11 October 2010 в 18:15
поделиться

6 ответов

Поведение по умолчанию разделено не возвращать пустые токены ( из-за нулевого предела). Используйте два метода разделения параметра с пределом -1, даст вам все пустые токены в возвращении.

Обновление:

Тестовый код следующим образом:

public class Test {
    public static void main(String[] args) {
    String currentString[] = "0|1|2|3|4|5|6|7|8||".split("\\|", -1);
    System.out.println("Length:"+currentString.length); 
    for(int i=0;i < currentString.length;i++){ System.out.println(currentString[i]); }
  }
}

Вывод следующим образом:

Length:11
0
1
2
3
4
5
6
7
8
--- BLANK LINE --    
--- BLANK LINE --

«- пустая строка -» передается мне, чтобы показать, что возвращение пустое. Это пусто один раз для пустого токена после 8 | И однажды для пустого заднего токена после последнего |.

Надеюсь, это проясняет вещи.

5
ответ дан 13 December 2019 в 22:08
поделиться

Моя Java немного ржаво, но не должно быть:

String currentString[] = "0|1|2|3|4|5|6|7|8||".split("\\|");
System.out.println("Length:"+currentString.length); 
for(int i = 0; i < currentString.length; i++)
{
  System.out.println(currentString[i]); 
} 
1
ответ дан 13 December 2019 в 22:08
поделиться

Во-первых, не используют EVAL () для этого. Там нет необходимости, и это открывает ваш сайт к уязвимостям, если вы любым способом используете пользовательский ввод как часть этого (прямо или косвенно). Правильный способ сделать это:

<div id="div">This is a test</div>

с CSS:

#div { padding: 15px; background: yellow; }

и JavaScript:

function slideObject(side) {
  var anim = {opacity: 0};
  anim["margin" + side] = "-1000px";
  $("#div").animate(anim, 1000);
}

$(function() {
  slideObject("Left");
});

вы отметилируете, что значение изменяется на 0. Скрыть Не допустимое значение для непрозрачности .

В основном вы создаете анонимный объект, а затем назначают динамическое свойство с использованием [].

-121--2938699-

Вам необходимо использовать indexOf () , а затем Подстрока () для этого для работы. Я не думаю, что вы можете опустить строку с помощью Split () только.

0
ответ дан 13 December 2019 в 22:08
поделиться

IMO, я думаю, что это поведение по умолчанию Split, в любом случае, попробуйте следующее:

String CreatsString [] = Br.Readline (). Заменить («||», «| | »). Сплит (« \ | »); System.out.PrintLn («Длина:» + CurrentString.Length); для (int i = 0; i

Это еще не было проверено, но я думаю, что это должно сделать трюк.

0
ответ дан 13 December 2019 в 22:08
поделиться

Пожалуйста, проверьте следующий код, я использовал ваше решение, он работает:


public class SplitTest 
{
    public static void main(String[] args)
    {
      String text = "0|1|2|3|4|5|6|7|8||";
      String pattern = "\\|";
      String [] array = text.split(pattern, -1);
          System.out.println("array length:" + array.length);
          for(int i=0; i< array.length; i++) 
          System.out.print(array[i]+ " ");
        } 
 }

Выход:

array length:11
0 1 2 3 4 5 6 7 8   
0
ответ дан 13 December 2019 в 22:08
поделиться

String.split () являются странными.

Его экстремальная странность, в этом и других путях, является некоторыми причинами, почему мы сделали Разделитель .

Это имеет менее удивительное поведение и большую гибкость.

4
ответ дан 13 December 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: