我正在制作程序的一部分,该程序将检查输入JTextArea的字符串是否为数字,如果是,则字符串包含的数字(顺便说一句,不是整个字符串包含数字,而且我不喜欢不知道这个数字是多少位数。我已经知道如何从JTextArea获取字符串以及如何检查字符串是否包含数字。但我不知道如何从字符串中获取确切的数字。以下是我正在使用的两种方法:
//no problems with this method, it's just here for reference.
public static boolean isNum(char[] c, int index){
//I want to include numbers 0-9
for(int i = 0; i < 10; i++){
if(c[index].equals(i(char)) || c[index].equals('.')){
return true;
}
}
//if the character is not a number 0-9, it is not a number, thus returning false.
return false;
}
和
//I need a string parameter to make it easier to get the text from the JTextArea
public static float checkNum(String s){
//a List to hold the digits
List<Char> digits = new List<Char>();
//a char array so I can loop through the string
char[] c = s.toCharArray();
for(int i = 0; i < c.length(); i++){
//if the character is not a number, break the loop
if(!isNum(c[i])){
break;
}
else{
//if the character is a number, add it to the next digit
digits.add(c[i]);
}
}
//insert code here.
}
也许我应该将char列表转换回char数组,然后将其转换为字符串,然后将其转换为float?如果是这样,我该怎么做?
编辑:谢谢大家,我看了正则表达式,但我不认为这样做。我正在寻找带有未知位数的一个号码。我知道这个数字最后会有一个空格(或者至少是一个非数字值)。答案 0 :(得分:3)
您应该使用正则表达式。在java中,你可以遍历每个数字实例,如下所示:
java.util.regex.Pattern;
java.util.regex.Matcher;
Pattern p = Pattern.compile("\\d+?\\.\\d+");
Matcher m = p.matcher(inputString);
while(m.find())
//do some string stuff
或者您可以通过用以下内容替换while循环来查找字符串中的一个匹配和一组数字:
String digits = m.group(1);
double number = Double.valueOf(digits);
有关其工作原理的更多信息,请查找正则表达式。此网站特别有用https://regexone.com/
答案 1 :(得分:0)
您可以使用正则表达式来测试和提取任意长度的数字。 这是一个简单的示例方法:
public Integer extractNumber(String fromString){
Matcher matcher = Pattern.compile("\\D*(\\d+)\\D*").matcher(fromString);
return (matcher.matches()) ? new Integer(matcher.group(1)) : null;
}
如果要处理数字中的小数,可以将方法更改为:
public Double extractNumber(String fromString){
Matcher matcher = Pattern.compile("\\D*(\\d+\\.?\\d+)\\D*").matcher(fromString);
return (matcher.matches()) ? new Double(matcher.group(1)) : null;
}