Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_Int - Fatal编程技术网

Java用字母和数字解析一个整数

Java用字母和数字解析一个整数,java,string,int,Java,String,Int,我处理的数据是一个字符串,后跟空格,然后是一个数值 ncols 10812 nrows 10812 xllcorner -107.0005555556 yllcorner 36.99944444444 cellsize 9.2592592593e-05 我只是想读入数值。我知道从String到Integer或Double,我可以使用标准类型转换 Integer.valueOf(stringOfInteger); Double.value

我处理的数据是一个字符串,后跟空格,然后是一个数值

ncols         10812
nrows         10812
xllcorner     -107.0005555556
yllcorner     36.99944444444
cellsize      9.2592592593e-05
我只是想读入数值。我知道从String到Integer或Double,我可以使用标准类型转换

Integer.valueOf(stringOfInteger);
Double.valueOf(stringOfDouble);
为了得到数值,我尝试了以下测试:

BufferedReader br = new BufferedReader(new FileReader(path));
String line = br.readLine();
line.replace("[a-z]","");
line.replace(" ","");
System.out.println(line);
并且它输出
ncols 10812


我还担心读取cellsize值,因为它有一个指数。

您可以对每一行执行此操作:

...
String[] fields = line.split("\\s+");
String name = fields[0];
float value = Float.parseFloat(fields[1]);
...
此代码将使用空格作为分隔符拆分字段中的每一行。第一个字段是
字符串
,因此您可以直接使用它(或忽略它)。第二个是
Float
值,因此在使用它之前必须对其进行转换。如果您愿意,您可以使用
Double

试试这个

    BufferedReader br = new BufferedReader(new FileReader(path));
    String line = null;
    while ((line = br.readLine()) != null) {
        // split each line based on spaces
        String[] words = line.split("\\s+");
        //first word is name
        String name = words[0];
        // next word is actual number
        Double value = Double.valueOf(words[1]);
        System.out.println(name + ":" + value);
    }
    // don't forget to close the stream
    br.close();
输出:

    ncols:10812.0
    nrows:10812.0
    xllcorner:-107.0005555556
    yllcorner:36.99944444444
    cellsize:9.2592592593E-5

如果您想要所有数值,请在空格上拆分,第二项将包含您的数值。然后,您可以根据需要进行任何转换,而不必担心删除任何指数

String[] data = new line.split(" ");
//remove all the spaces from the second array for your data
data[1] = data[1].replaceAll("\\s", "");
//parse to whatever you need data[1] to be

您可以使用
Java
中的
split
函数,如下所示:

String [] dataArr = data.split("[ \t]+"); //assumes @data is you data string variable name
然后,
dataArr
将如下所示:

dataArr[0] =  "ncols"
dataArr[1] =  "10812"
dataArr[2] =  "nrows"
dataArr[3] =  "10812"
.
.
.

dataArr[n - 1] = "9.2592592593e-05"   // @n is the size of the array

然后,您可以使用
Integer.parseInt(String str)
将数字数据解析为整数。

(1)
replace
不使用正则表达式,
replaceAll
使用。(2) 字符串是不可变的,
replace
的结果不会影响原始字符串,但会返回带有替换内容的新字符串谢谢!效果很好。总有一天我应该坐下来学习正则表达式。不客气!正则表达式改变了我的生活:)