Идентификация номера в строке с использованием циклов for

Я пытаюсь определить, есть ли число во входных данных, используя циклы for. Давно пытался сделать, и даже искал на второй странице гугла. Я решил попросить помощи. Вот что я пробовал до сих пор:

for (c = 0 ; c < 6 ; c = c++)
{
    c = input.charAt (0);

    if (Character.isDigit (c))
    {
        System.out.println ("Input must only contain letters.");
        return;
    }

}

В основном я пытаюсь сканировать каждую букву и проверять их по отдельности, являются ли они буквой или цифрой, с чем у меня возникают проблемы, поскольку сканируется только первая буква. Я также пробовал набирать «С++» в цикле. Как мне отсканировать каждую букву?

Редактировать: Упс, это была ошибка. Я изменил его на c = c + 1, но это не сработало, я изменил его обратно на c++, но в итоге получилось c = c++.


person Ramin Amiri    schedule 21.12.2016    source источник
comment
Вы ищете либо регулярное выражение, либо перебираете каждый символ и проверяете, является ли он цифрой или нет, с помощью функции Character.isDigit(). Посмотрите на следующий вопрос: stackoverflow .com/questions/18590901/   -  person Abdulgood89    schedule 21.12.2016
comment
Как мне использовать str.matches(.*\\d+.*);? Я немного новичок в кодировании, и мы еще точно не изучили это.   -  person Ramin Amiri    schedule 21.12.2016
comment
String myString = Вставьте здесь свою строку 123; System.out.println(myString.matches(.*\\d+.*)); Если ваша строка соответствует этому регулярному выражению, она вернет true. Регулярное выражение проверяет, существуют ли в строке какие-либо цифры.   -  person Abdulgood89    schedule 21.12.2016


Ответы (5)


Эта строка: c = input.charAt(0); имеет две проблемы.

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

char chr = input.charAt(....

Во-вторых, вы захватываете только первый char, потому что отправляете 0 в функцию .charAt(). Попробуй это:

char chr = input.charAt(c);
if (Character.isDigit (chr))
{
    System.out.println ("Input must only contain letters.");
    return;
}
person CraigR8806    schedule 21.12.2016
comment
Спасибо, теперь я понимаю. Я пробовал много экспериментировать, поэтому многие вещи находятся в разных положениях. Я передам свой код, еще раз спасибо. - person Ramin Amiri; 21.12.2016

Используйте регулярное выражение и класс Pattern Java:

boolean b = Pattern.matches("[0-9]+", input);

Если вы не знакомы с регулярными выражениями, [0-9]+ найдет одно или несколько вхождений (оператор '+') любой цифры от 0 до 9 в вашей строке. Затем все, что вам нужно сделать, это проверить, является ли переменная b истинной (указывающей, что поиск нашел число) или ложной (в строке нет чисел).

Кроме того, я заметил, что вы увеличиваете переменную цикла c следующим образом:

c = c++

Эта операция фактически не влияет на значение c. Оператор ++ после переменной в операторе присваивания означает «увеличение значения переменной на единицу после, когда вы присваиваете ее текущее значение другой переменной. Тогда происходит то, что вы присваиваете значение c переменной сам, увеличивая c на единицу. Это увеличенное значение никогда не сохраняется обратно в c, поэтому ваш цикл, вероятно, будет продолжаться бесконечно. Правильный способ увеличить переменную цикла выглядит следующим образом:

for (c = 0; c < 6; c++) {
    // ...
}
person lsnare    schedule 21.12.2016

Вы не можете использовать c как индекс и значение одновременно. Попробуй это:

for (int i = 0; i < 6; i++) {
    c = input.charAt(i);
    // ...
}
person shmosel    schedule 21.12.2016
comment
О, я вижу. В этом есть смысл. - person Ramin Amiri; 21.12.2016

Я создал эту логическую функцию, проверьте, помогает ли это.

public static boolean containtsDigits(String input) {
        boolean isDigit = false;
        if(input != null && !input.isEmpty()){
            char[] letterCharArray = input.toCharArray();
            for(int i = 0 ; i < letterCharArray.length ; i++){
                if(Character.isDigit(letterCharArray[i])){
                    isDigit = true;
                    break;
                }
            }
        }

        return isDigit;
    }
person hopeIsTheonlyWeapon    schedule 21.12.2016

Попробуйте это:

public void check(String word){

    int n=word.length();  // To Find length of the string.
    for(int c=0;c<n;c++ ){ 
        char ch=word.charAt(c); // for extracting every single element of word

        if(Character.isDigit(ch))  // To check if its Digit
        {
            System.out.println ("Input must only contain letters.");
            break;
        }
    }

    System.out.println ("All Good");
}
person Farzam Alam    schedule 21.12.2016
comment
Вместо того, чтобы просто сказать, попробуйте, можете ли вы объяснить по-английски, какую проблему вы увидели в исходном коде? Ваш пример кода хорош, и комментарии великолепны, но этот ответ может быть трудно интерпретировать кому-то (особенно потому, что он не отличается от исходного кода). - person Guildencrantz; 21.12.2016
comment
Спасибо, Гильденкранц, за указание на мою ошибку, я позабочусь об этом в следующий раз. - person Farzam Alam; 22.12.2016