2015-02-16 6 views
0

Я разделив строку чисел, разделенных пробелами, как это:String.split() удаление первого элемента

Integer.valueOf(input.split(" ")[i]); 

Но если пользователь вводит 1 2 3 4 5, 2 3 4 5 (есть пространство перед ними) это то, что выходит. Почему это?
Я попытался добавить пробел в начале строки с input = " " + input, но это как раз получается, два места в передней части 2.

scan.next(); 
String input = scan.nextLine(); 
System.out.println(input); 
System.out.println(Integer.valueOf(
     input.split(" ")[0])); 
for(int i = 0; i < input.length() - 1; i++) { 
     nums[i] = Integer.valueOf(
       input.split(" ")[i]); 
} 
+0

Просьба поделиться всем своим кодом. Как вы вывести целые числа? – MinecraftShamrock

+0

И каков диапазон ваших 'i'? – RealSkeptic

+2

Держу пари, что есть строка выше, которая говорит 'for (int i = 1; i <5; i ++)'. – aioobe

ответ

-2

Я предполагаю, что вы просите пользователя ввести последовательность чисел в одной строке. Таким образом, вы можете получить 1 , 2 3 , 52 в качестве введенного значения в виде строки. Вы хотите сохранить числа в массив int. Способ сделать это - взять строку и удалить все символы, которые не имеют ничего общего с числами, в этом случае это пробелы и комма. Будет проблема, если кто-то войдет в a 1 , 4 59, но я игнорирую этот сценарий, потому что это не имеет никакого отношения к вопросу.

String line = scanner.nextLine(); // line = "1 , 2 3 , 45" 

Удалите Komma первый:

String result = line.replaceAll("," , " "); // replaces all komma's with a space. 

Теперь у вас есть строка без Komma-х Чтобы избежать двойных чисел цифры не должны быть преобразованы в 2 однозначных цифр, вы можете использовать StringTokenizer.

StringTokenizer st = new StringTokenizer("this is a test"); 
    while (st.hasMoreTokens()) { 
     System.out.println(st.nextToken()); 
    } 

печатает:

это

является

тест

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

 StringTokenizer resultLine = new StringTokenizer(result); 
     int[] numbers = new int[resultLine.countTokens()]; 
     for (int i = 0; resultLine.hasMoreTokens(); i++) { 
      numbers[i] = Integer.parseInt((String) resultLine.nextElement()); 
     } 
     for (int j = 0; j < numbers.length; j++) { 
      System.out.print(numbers[j] + " "); 
     } 
     System.out.println(); 
    } 

Что, наконец, дает нам желаемый результат, массив целых чисел.

Scanner s = new Scanner(System.in); 
    while (s.hasNext()) { 
    String line = s.nextLine(); 
    String result = line.replaceAll(",", " "); 
    StringTokenizer resultLine = new StringTokenizer(result); 
    int[] numbers = new int[resultLine.countTokens()]; 
    for (int i = 0; resultLine.hasMoreTokens(); i++) { 
     numbers[i] = Integer.parseInt((String) resultLine.nextElement()); 
    } 
    for (int j = 0; j < numbers.length; j++) { 
     System.out.print(numbers[j] + " "); 
    } 
    System.out.println(); 
} 

Input был: 1, 2 3, 52

Выход: 1 2 3 52 // int[] numbers = {1,2,3,52};

Я надеюсь, что это какой-то полезным для вас.

+0

'Строковый результат = input.replaceAll (" \\ s + ",", "); Строка testResult [] = result.split (","); 'будет лучше. –

+0

Зачем проверять '', ''? – WonderWorld

+1

Просьба уточнить, не просто отправить код без контекста или объяснения. В частности, в чем смысл удаления всех пробелов? Почему бы просто не использовать 'input.split (" \\ s + ")'? Ваше решение ограничивает допустимые входные данные для отдельных цифр. – dimo414

-2

Когда вы спрашиваете: «Почему это не работает так, как я ожидаю?» и подобные вопросы, всегда очень полезно предоставить MVCE, чтобы мы могли реплицировать то, что вы видите.

Предполагая scan является Scanner и вы не делаете дополнительную обработку ввода до линий, которые Вы вставили, неиспользованная призван scan.next(), который продвигает сканер мимо первых маркеров ввода, является то, что путает ваш вклад. Попробуйте прокомментировать эту строку и input должен содержать всю строку текста.

+0

Я не понял, что это так. Благодарю. Проблема в том, что я заранее использую большую часть сканирования.nextInt(), и преобразовать все это в nextLine было бы довольно много усилий. Есть ли способ заставить его работать? – IHazABone

+1

Если вы публикуете SSCCE, который мы можем запустить, мы можем попытаться реплицировать вашу проблему и предложить решения. Отключение фрагмента кода, который не компилируется (размещен в вашем вопросе), и «я использую большую часть scan.nextInt()« есть небольшой совет дать. – dimo414

+0

@ dimo414 Тогда почему вы нарушаете мои яйца над чем-то, что вы в первую очередь находите недостаточно? – WonderWorld

Смежные вопросы