Я замечаю странное поведение при использовании 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.
Любая справка значительно ценилась бы!
Поведение по умолчанию разделено не возвращать пустые токены ( из-за нулевого предела). Используйте два метода разделения параметра с пределом -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 | И однажды для пустого заднего токена после последнего |.
Надеюсь, это проясняет вещи.
Моя 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]);
}
Во-первых, не используют 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. Скрыть
Не допустимое значение для непрозрачности
.
В основном вы создаете анонимный объект, а затем назначают динамическое свойство с использованием []
.
Вам необходимо использовать indexOf ()
, а затем Подстрока ()
для этого для работы. Я не думаю, что вы можете опустить строку с помощью Split ()
только.
IMO, я думаю, что это поведение по умолчанию Split, в любом случае, попробуйте следующее:
String CreatsString [] = Br.Readline (). Заменить («||», «| | »). Сплит (« \ | »);
System.out.PrintLn («Длина:» + CurrentString.Length);
для (int i = 0; i Это еще не было проверено, но я думаю, что это должно сделать трюк.
Пожалуйста, проверьте следующий код, я использовал ваше решение, он работает:
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
String.split () являются странными.
Его экстремальная странность, в этом и других путях, является некоторыми причинами, почему мы сделали Разделитель .
Это имеет менее удивительное поведение и большую гибкость.