Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从用空格或逗号分隔的字符串中提取数字_Java_Regex_String_Validation - Fatal编程技术网

Java 从用空格或逗号分隔的字符串中提取数字

Java 从用空格或逗号分隔的字符串中提取数字,java,regex,string,validation,Java,Regex,String,Validation,给定一个包含由空格或逗号分隔的数字的字符串,如何将这些数字提取到数组中?需要注意的是,如果我尝试使用空格或逗号分隔,我不确定是否会将事情分割成太多的部分 Scanner sc = Scanner.(System.IN); String input = sc.nextLine(); double numbers[] = (double)input.split(",|\s"); 输入的一个例子是 4 5 9 2,3,7 8,2 1 5, 3, 4, 5 结果将是一个数组,其中包含分配给数组

给定一个包含由空格或逗号分隔的数字的字符串,如何将这些数字提取到数组中?需要注意的是,如果我尝试使用空格或逗号分隔,我不确定是否会将事情分割成太多的部分

Scanner sc = Scanner.(System.IN);
String input = sc.nextLine();
double numbers[] = (double)input.split(",|\s");
输入的一个例子是

4 5 9

2,3,7

8,2 1

5, 3, 4, 5
结果将是一个数组,其中包含分配给数组元素的每个数字。但不允许出现以下情况
4,2

,1,2,3

4,5,


但是,用户可能会错误地输入非字母的内容(例如,键入“q”而不是1),我希望使用
try
catch
,但我不确定这会是什么样子,因为
.split()
返回一个数组。

按任意数量的空格或逗号分割,然后将每个结果字符串解析为一个数字:

String[] numberParts = input.split("[\\s,]+");
double[] doubles = new double[numberParts.length];
int i=0;
for (String part : numberParts) {
   double value = Double.parseDouble(part);
   doubles[i++] = value;
}

不知道输入的确切内容或格式,但根据您刚才描述的内容,您必须使用split(“”)/split(“”,“”)函数的组合,然后通过double.parseDouble(“1234”)将字符串转换为double。

您可以使用以下方法:

    String line="1 2 3 55,56 , 8989 , 88.00 , -76.08 , -6 , +4";
String REGEX=" |,";
String res[]=line.split(REGEX);
double numbers[]=new double[res.length];
int i=0;
for(String val:res){
    if(!val.isEmpty()&& val.matches("[+-]?\\d+(\\.\\d+)?"))
        numbers[i++]=Double.parseDouble(val);
}
for(int j=0;j<i;j++){
    System.out.println(numbers[j]);
}

首先替换所有非数字(分隔符除外)怎么样?最好将分隔符设置为1个固定值

您可以这样尝试:

//replace ',' with 'space' so that you only have 1 type of separator
input=input.replaceAll(","," ").replaceAll("[a-zA-Z!@#.:;$%?|^\\&*/()+=-]+","");
double numbers[] = (double)input.split("\\s"); //or split(" ")

字符串上的split()返回字符串[],这一点有很好的文档记录。。什么是困惑?@sanbhat我知道,问题是什么?从你的代码中,你期望双重[],因此最好用可能的输入和期望的输出来重申你的问题,以获得清晰是的,这就是我使用
(双重)
进行转换的原因。让你知道我知道代码不起作用,这就是我来这里的原因。我更新了,这样更好吗?请您解释一下[\\s,]+?@Celeritas-[\\s,]是一个字符类,由所有空格字符(空格、制表符等)和逗号字符组成。X+表示X,一次或多次。组合的意思是一个或多个空格或逗号字符。有关更多信息,请参阅javadoc for Pattern-谢谢,有一点不清楚,为什么会有两个斜杠\s与空白相匹配,那么第一个斜杠的作用是什么是一个反斜杠(),那么正则表达式引擎如何知道我们想要匹配空格而不是反斜杠呢?@Celeritas-您正在以java字符串文本的形式传递模式参数。java字符串文字的语法以一种特殊的方式处理反斜杠-考虑“\n”。因此作为java字符串文字的一部分“\\”最终成为实际字符串中的一个反斜杠。
//replace ',' with 'space' so that you only have 1 type of separator
input=input.replaceAll(","," ").replaceAll("[a-zA-Z!@#.:;$%?|^\\&*/()+=-]+","");
double numbers[] = (double)input.split("\\s"); //or split(" ")