Вопрос:

Как проверить, что строка содержит только цифры и одно вхождение десятичной точки?

java regex string decimal

12126 просмотра

8 ответа

65 Репутация автора

Моя идея примерно такая, но я не знаю правильный код

if (mystring.matches("[0-9.]+")){
  //do something here
}else{
  //do something here
}

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

Автор: user3320339 Источник Размещён: 21.02.2014 01:26

Ответы (8)


0 плюса

4110 Репутация автора

int count=0;
For(int i=0;i<mystring.length();i++){    
    if(mystring.charAt(i) == '/.') count++;
}
if(count!=1) return false;
Автор: ltalhouarne Размещён: 21.02.2014 01:29

9 плюса

6782 Репутация автора

Если вы хотите -> убедиться, что это число И имеет только один десятичный знак <- попробуйте этот RegEx вместо этого:

if(mystring.matches("^[0-9]*\\.?[0-9]*$")) {
    // Do something
}
else {
    // Do something else
}

Это RegEx заявляет:

  1. ^ Означает, что строка должна начинаться с этого.
  2. За ним не должно быть ни одной или нескольких цифр (* делает это).
  3. При желании можно указать один десятичный знак (это делает?)
  4. Следуйте ни одной или более цифр (* делает это).
  5. И $ означает, что это должно закончиться этим.

Обратите внимание, что пункт № 2 - поймать кого-то, например, вводящего «.02».

Если это не верно, сделайте RegEx: "^[0-9]+\\.?[0-9]*$"

  • Единственная разница - знак +. Это приведет к тому, что десятичной дроби будет предшествовать цифра: 0,02
Автор: Timeout Размещён: 21.02.2014 01:31

2 плюса

53687 Репутация автора

Я думаю, что использование регулярных выражений усложняет ответ. Более простой подход заключается в использовании indexOf()и substring():

int index = mystring.indexOf(".");
if(index != -1) {
    // Contains a decimal point
    if (mystring.substring(index + 1).indexOf(".") == -1) {
        // Contains only one decimal points
    } else {
        // Contains more than one decimal point 
    }
}
else {
    // Contains no decimal points 
}
Автор: Code-Apprentice Размещён: 21.02.2014 01:34

1 плюс

9640 Репутация автора

самый простой

Пример:

"123.45".split(".").length();
Автор: Orel Eraki Размещён: 21.02.2014 01:37

1 плюс

5425 Репутация автора

Если вы хотите проверить, имеет ли число (положительное) одну точку, и если вы хотите использовать регулярное выражение, вы должны экранировать точку, потому что точка означает «любой символ» :-)

см. http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html.

Predefined character classes
.   Any character (may or may not match line terminators)
\d  A digit: [0-9]
\D  A non-digit: [^0-9]
\s  A whitespace character: [ \t\n\x0B\f\r]
\S  A non-whitespace character: [^\s]
\w  A word character: [a-zA-Z_0-9]
\W  A non-word character: [^\w]

так что вы можете использовать что-то вроде

System.out.println(s.matches("[0-9]+\\.[0-9]+"));

пс. это будет соответствовать номеру, например 01.1. Я просто хочу проиллюстрировать \\.

Автор: Leo Размещён: 21.02.2014 01:42

2 плюса

936 Репутация автора

Вы можете использовать indexOf()и lastIndexOf():

int first = str.indexOf(".");
if ( (first >= 0) && (first - str.lastIndexOf(".")) == 0) {
    // only one decimal point
}
else {
    // no decimal point or more than one decimal point
}
Автор: Brian Onn Размещён: 21.02.2014 01:46

0 плюса

2175 Репутация автора

Используйте ниже RegEx его решить вашу проблему

  1. разрешить 2 десятичных знака (например, от 0,00 до 9,99)

    ^[0-9]{1}[.]{1}[0-9]{2}$
    
    This RegEx states:
    
    1. ^ means the string must start with this.
    2. [0-9] accept 0 to 9 digit.
    3. {1} number length is one.
    4. [.] accept next character dot.
    5. [0-9] accept 0 to 9 digit.
    6. {2} number length is one.
    
  2. разрешить 1 десятичных знаков (например, от 0,0 до 9,9)

    ^[0-9]{1}[.]{1}[0-9]{1}$
    
    This RegEx states:
    
    1. ^ means the string must start with this.
    2. [0-9] accept 0 to 9 digit.
    3. {1} number length is one.
    4. [.] accept next character dot.
    5. [0-9] accept 0 to 9 digit.
    6. {1} number length is one.
    
Автор: Kailas Размещён: 26.09.2014 12:27

0 плюса

600 Репутация автора

Я создаю себя, чтобы точно решить проблему вопроса. Я поделюсь с вами, ребята, регулярное выражение:

^(\d)*(\.)?([0-9]{1})?$

Взгляните на это онлайн-регулярное выражение, чтобы увидеть работу правильно

Обратитесь к документации, если вы хотите продолжить настраивать регулярное выражение

Документация

Автор: topcbl Размещён: 07.12.2016 06:23
Вопросы из категории :
32x32