我正在尝试让扫描仪从外部数据文件中读取字母和数字,并将它们插入到单独的数组中。我需要将前两个字母分成不同的数组,将两个数字中的每一个分成单独的数组,我在这样做时遇到了一些麻烦。
我试过做Scanner.next
和Scanner.nextLine
并解析它,但它似乎不起作用,任何人都可以在正确的方向上推动我吗?
数据文件如下所示
FH45 36.266
MF18 46.967
MH29 33.309
MT95 36.983
MR30 23.1768
FF31 42.55
FF65 39.96
FT50 30.962
FR80 19.375
MH36 24.017
QF40 30
MQ40 30
这是我到目前为止的代码,我所拥有的只是数组,我想将四个不同的东西分成四个不同的数组,我根本不想打印出任何东西。
import java.io.*;
import java.util.*;
public class Height
{
public static void main(String[]args) throws IOException
{
Scanner inFile = new Scanner(new FileInputStream("info.dat"));
char Bone[] = new char[12];
char Gender[] = new char[12];
int Age[] = new int[12];
double Length[] = new double[12];
}
}
while(scan.hasNext())
{
System.out.print("Letter is" +scan.next());
System.out.println("Number is"+Double.parseDouble(scan.next()));
}
如果在 next
() 之后使用 nextLine
() 方法,那么它将返回数字以及字母和数字之间的空格。因此,请使用trim()
方法来删除空格或next()
来代替nextLine()
import java.util.*;
import java.io.*;
public class HelloWorld{
public static void main(String []args) throws IOException{
Scanner s = null;
String str = "FH45 36.266nMF18 46.967";
ArrayList<String> array1 = new ArrayList<String>();
ArrayList<Double> array2 = new ArrayList<Double>();
try {
//uncomment this line for file
//s = new Scanner(new BufferedReader(new FileReader("xanadu.txt")));
s = new Scanner(new BufferedReader(new StringReader(str)));
while (s.hasNext()) {
String token = s.next();
try{
double d = Double.parseDouble(token);
array2.add(d);
}
catch(NumberFormatException nfe){
array1.add(token);
}
}
} finally {
if (s != null) {
s.close();
}
System.out.println("Printing Letter Array ");
for(String out: array1){
System.out.print(out+" ");
}
System.out.println("nPrinting Numeric Array");
for(Double out: array2){
System.out.print(out+" ");
}
}
}
}
认为您用BufferedReader
读取所有文件,并像我对Mylines所做的那样Array
或ArrayList
将其删除: 希望以下代码对您有所帮助
void doMyJob(){
String[] mylines=new String[]{ "FH45 36.266","MF18 46.967","MH29 33.309",
"MT95 36.983","MR30 23.1768",
"FF31 42.55","FF65 39.96",
"FT50 30.962","FR80 19.375",
"MH36 24.017","QF40 30",
"MQ40 30"};
ArrayList<String> data1 = new ArrayList<String>();
ArrayList<String> data2 = new ArrayList<String>();
for(int i=0; i<mylines.length; i++){
//for FIRST two letters
data1.add(mylines[i].substring(0,2));
//So on as you want..
//for VALUES
String[] raw = mylines[i].split("\s");
data2.add(raw[1]);
}
for(int i=0; i<mylines.length; i++){
System.out.println(data1.get(i));
}
for(int i=0; i<mylines.length; i++){
System.out.println(data2.get(i));
}
}
对于此特定示例,请使用 Scanner.nextLine() 将整行读取到 String 对象中。
接下来,使用 String.charAt(n) 方法将前两个字符读取到第一个和第二个字段中:
String letter1 = lineStringFromFile.charAt(0);
String letter2 = lineStringFromFile.charAt(0);
接下来,截断从文件中读取的行中的前两个字母:
listStringFromFile = lineStringFromFile.substring(2, lineStringFromFile.length());
接下来,为字符串创建一个扫描程序:
Scanner myScanner = new Scanner(listStringFromFile);
现在,由于字符串包含由空格分隔的两个数字,因此您可以使用 Scanner 对象从字符串中轻松读取接下来的两个数字。
我假设您只想打印包含字符和整数的部分。在这种情况下,我认为您可以使用以下方法:-
import java.util.*;
public class Demo
{
public static void main(String[] args)
{
ArrayList<Integer> Int = new ArrayList<Integer>();
ArrayList<Double> duble = new ArrayList<Double>();
ArrayList<Character> FirstChar = new ArrayList<Character>();
ArrayList<Character> SecondChar = new ArrayList<Character>();
try
{
Scanner scan = new Scanner(new BufferedReader(new FileReader(filepath)));
while(scan.hasNext())
{
String str = scan.nextLine();
FirstChar.add(str.charAt(0));
SecondChar.add(str.charAt(1));
Int.add(Integer.parseInt(str.substring(2,4)));
duble.add(Double.parseDouble(str.substring(5)));
scan.next();
}
for(Integer I:Int)
System.out.print(I.intValue()+"t");
System.out.println();
for(Double d:duble)
System.out.print(d.doubleValue()+"t");
System.out.println();
for(Character Char:FirstChar)
System.out.print(Char.charValue()+"t");
System.out.println();
for(Character Char:SecondChar)
System.out.print(Char.charValue()+"t");
System.out.println();
}
catch(Exception e)
{
e.printStackTrace();
}
finally{
scan.close();
}
}
}