My idea is something like this but I dont know the correct code
if (mystring.matches("[0-9.]+")){
//do something here
}else{
//do something here
}
I think I'm almost there. The only problem is multiple decimal points can be present in the string. I did look for this answer but I couldn't find how.
If you want to -> make sure it's a number AND has only one decimal <- try this RegEx instead:
if(mystring.matches("^[0-9]*\\.?[0-9]*$")) {
// Do something
}
else {
// Do something else
}
This RegEx states:
Note that bullet point #2 is to catch someone entering ".02" for example.
If that is not valid make the RegEx: "^[0-9]+\\\\.?[0-9]*$"
I think using regexes complicates the answer. A simpler approach is to use indexOf()
and 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
}
You could use indexOf()
and 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
}
Simplest
Example:
"123.45".split(".").length();
If you want to check if a number (positive) has one dot and if you want to use regex, you must escape the dot, because the dot means "any char" :-)
see 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]
so you can use something like
System.out.println(s.matches("[0-9]+\\.[0-9]+"));
ps. this will match number such as 01.1 too. I just want to illustrate the \\\\.
int count=0;
For(int i=0;i<mystring.length();i++){
if(mystring.charAt(i) == '/.') count++;
}
if(count!=1) return false;
Use the below RegEx its solve your proble
allow 2 decimal places ( eg 0.00 to 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.
allow 1 decimal places ( eg 0.0 to 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.
I create myself to solve exactly question's problem. I'll share you guys the regex:
^(\\d)*(\\.)?([0-9]{1})?$
Take a look at this Online Regex to see work properly
Refer documentation if you wish continue to custom the regex
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.