我有一个包含一些数字的.txt文件。它看起来像这样:
1 4364 658 4328 666
2 5109 659 5100 638
3 4936 659 4904 677
4 4936 659 4957 639
5 5518 660 5602 672
我需要提取除第一列(1,2,3,4,5 ...)之外的所有数字,并将它们用于进一步计算。任何帮助,小费都会有所帮助。
答案 0 :(得分:2)
您可以使用java.io和java.nio包中的类。 BufferedReader可以逐行读取您的文件:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("Path"))));
String line = null;
while((line = br.readLine()) != null){
//do stuff in here
}
在Google Guava中,reading文件有一些有用的方法。
此特殊情况下的列拆分可以通过split类的String方法完成。
line.split(" ");
对于分割,使用Google的Guava库也可能对字符串拆分有很大帮助。
使用诸如Long,Integer之类的包装类可以实现对数字的处理,尤其是各个类中的静态方法valueOf。
Long.valueOf("123");
答案 1 :(得分:2)
您可以像这样分开第一列。
import java.io.*;
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("Path"))));
String line = null;
while((line = br.readLine()) != null){
System.out.println(line.substring(line.indexOf(" ") + 1));
}
br.close();
现在您可以根据需要操作字符串的其余部分。
答案 2 :(得分:1)
使用Google Guava的Files.readLines()方法将字符串转换为列表。从那里,解析其余部分可以使用正则表达式或简单地计算字母。 Integer类附带了一个parseInt(String)方法,该方法将单个字符串转换为整数。
答案 3 :(得分:1)
我会使用一个双循环,一个用于将文件中的文本拆分为字符'\ n',这将为您提供一个字符串数组,其中每个元素是文件中的一行,然后遍历该数组并爆炸每一行关闭角色''。从那时起,它只是忽略了结果数组中的第一个元素。
这是我正在谈论的功能:
答案 4 :(得分:1)
请参阅RandomAccesFile和int Wrapperclass Integer
RandomAccesFile f = new RandomAccessFile("file.txt", "r"); // r=read, w=write
String line = f.readLine();
String[] values = line.split(" ");
int[] valueInt;
for(int i = 1; i < values.length; i++) {
valueInt[i-1] = Integer.pars(values[i]);
}
或尝试RandomaccesFile.readInt()
- Methode
答案 5 :(得分:1)
也许是这样的:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class ReadNumbers {
public List<int[]> getNumbers(InputStream is) throws IOException {
List<int[]> result = new ArrayList<int[]>();
BufferedReader reader = null;
String line = null;
try {
reader = new BufferedReader(new InputStreamReader(is));
while ((line = reader.readLine()) != null) {
String[] s = line.split("\\s+");
int[] numbers = new int[s.length - 1];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = Integer.parseInt(s[i + 1]);
}
result.add(numbers);
}
} finally {
if (reader != null) {
reader.close();
}
}
return result;
}
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
ReadNumbers reader = new ReadNumbers();
InputStream is = null;
try {
is = new FileInputStream("numbers.txt");
List<int[]> numbers = reader.getNumbers(is);
for (int[] n : numbers) {
int sum = 0;
for (int i : n) {
sum += i;
}
System.out.println("sum=" + sum);
}
} finally {
if (is != null) {
try {
is.close();
} catch (IOException ignore) {
}
}
}
}
}
答案 6 :(得分:0)
使用FileReader读取文件:
File tFile = loadGradleResource("testdata.int");
FileReader fileReader = null;
ArrayList<String> lines = new ArrayList<String>();
try {
String line = null;
fileReader = new FileReader( tFile );
BufferedReader bufferedReader = new BufferedReader( fileReader );
while ( !( line = bufferedReader.readLine() ).isEmpty() ) {
lines.add(line);
}
bufferedReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
然后这个方法来标记每一行:
for ( String lin : lines ) {
String[] stritems = lin.split( " " );
for ( String it : stritems ) {
// this shows how to parse to integer
System.out.print( Integer.parseInt( it ) + "," );
}
System.out.println();
}