2013-10-12 6 views
-1
public static void main(String[] args){ 
Scanner scan = new Scanner(System.in); 
String read = scan.readLine(); 
String str = read + ":" + "world"; 
String[] sets = str.split(":"); 
System.out.println(sets[0] + sets[1]); 
} 

Здесь, если мы вступаем hello, я получаю hello world. Но когда пользователь вводит данные, которые имеют «:», тогда введенная строка также разделяется, и «:» не будет напечатано. Что можно сделать, чтобы не разбить введенные данные, содержащие «:»?Строка сплит проблема с введенных пользователем данных

+2

Вы расколоть ** на ** шаблон. –

ответ

2

Не разделяйте на тот же характер, пользователь может напечатать сам.

Даже если это, вероятно, слишком много, вы можете быть уверены, что это не повторится, используя uuid в качестве разделителя.

Scanner scan = new Scanner(System.in); 
String read = scan.readLine(); 
String separator = UUID.randomUUID().toString(); 
String str = read + separator + "world"; 
String[] sets = str.split(separator); 
System.out.println(sets[0] + sets[1]); 
+0

Вы должны проверить, не содержат ли пользовательские данные случайный разделитель, и если он делает это случайным образом, пока это не произойдет. Я не уверен, что uuid может иметь некоторые метасимволы регулярных выражений, поэтому, если он может быть разделен, должен выполняться на 'Pattern.quote (separator)'. – Pshemo

+0

Строковое представление 'UUID' содержит только' [0-9a-f-] ', 32 символа (36, включая' -'), которые пользователь может * случайно * ввести и сопоставить, кажется мне почти невозможным, но да, вы может проверить это, просто чтобы быть действительно ** уверенным на этот раз :-). – Alex

+0

@Pshemo Как это сделать с помощью 'Patten.quote (separator)'? – Mercenary

-1

Из документации:

public String[] split(String regex) 

Splits this string around matches of the given regular expression. 

This method works as if by invoking the two-argument split method with the given expression and a limit argument of zero. Trailing empty strings are therefore not included in the resulting array. 
-1
str.split(/*regex*/); 

удаляет разделитель/регулярное выражение при условии, чтобы разделить() из предоставленного строки и возвращает массив String. Вот почему вы не видите : в возвращаемую строку массива из split()

Link to DOCS

+0

Я знаю, как работает сплит. Я искал решение этой проблемы! – Mercenary

0

Очевидное и простое решение: если это возможно изменить разделитель. Вы также можете использовать трубу (|), #, $, еще много! Просто найдите тот, о котором вы уверены, что он не появится на входе! Вы можете даже попробовать с комбинацией разделителей, если вы используете регулярное выражение!

Скажите, если ваш разделитель:; (Двоеточие запятой) Вы можете разделить, как это с помощью регулярных выражений:

str.split("[:]{1}[;]{1}"); 

Это означает ровно один Двоеточие ровно один с запятой!

Надеюсь, что это поможет :).

0

Попробуйте, как это показано ниже:

char[] delims = {':'}; 
     for (char delim : delims) { 
     for (int i = 0; i < read.length(); i++) { 
      if (read.charAt(i) == delim) { 
       //Now write your code here 
    String str = read + "world"; 
      } 
else 
{ 
String str = read + ":" + "world"; 
} 
     } 
     } 
Смежные вопросы