我试图让扫描仪从外部数据文件,字母和数字中读取并将它们插入单独的数组中。我需要将前两个字母分成不同的数组,并将两个数字中的每一个分成不同的数组,我在这方面遇到了一些麻烦。
我尝试过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];
}
}
答案 0 :(得分:0)
while(scan.hasNext())
{
System.out.print("Letter is" +scan.next());
System.out.println("Number is"+Double.parseDouble(scan.next()));
}
如果您在nextLine
()之后使用next
()方法,则会返回数字以及字母和数字之间的空格。因此,请使用trim()
方法删除空格或next()
取代nextLine()
答案 1 :(得分:0)
import java.util.*;
import java.io.*;
public class HelloWorld{
public static void main(String []args) throws IOException{
Scanner s = null;
String str = "FH45 36.266\nMF18 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+" ");
}
}
}
}
答案 2 :(得分:0)
我假设您只想打印包含字符和整数的部分。在这种情况下,我认为您可以使用以下方法: -
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();
}
}
}
答案 3 :(得分:0)
考虑使用BufferedReader
阅读所有文件并将其存储在Array
或ArrayList
中,就像我对mylines一样:希望以下代码可以帮助您
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));
}
}
答案 4 :(得分:0)
对于此特定示例,请使用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对象从字符串中读取接下来的两个数字。