对于单一赋值,我必须从文本文件中获取输入并将其分类为两个单独的数组。该文本文件是一个足球联赛表,如下排列:
巴塞罗那34
皇马32
我写了一段这样的代码:
holdingString = fileInput.readLine ();
StringTokenizer sort = new StringTokenizer (holdingString + " ");
countOfTokens = sort.countTokens();
System.out.println (countOfTokens + " tokens: " + holdingString);
这打印出令牌的数量以及每行的令牌数,因此它给出了输出
两个代币:巴塞罗那34
三个代币:皇家马德里32
然后我写了这段代码:
for (int i = 0; i < countOfTokens; i++)
{
String temp = sort.nextToken ();
System.out.println(temp);
}
这只读取下一个标记并将其打印出来
但是,我不想打印下一个标记,而是要检查它是单词还是数字,并相应地将它分成不同的数组,所以它将是这样的:
ArrayTeam Zero Element巴塞罗那
ArrayTeam First Element Real Madrid
ArrayPoints零元素34
ArrayPoints第一个元素32
最简单的方法是什么?我尝试过使用try / catch,但是没有把它弄好。我也尝试使用带有\ d的if语句,但这也没有用。
答案 0 :(得分:0)
您可以使用split
String strs[] = holdingString.split("\\s");
E.g。
"Barcelona 34".split("\\s"); will return you Array of Strings where
array[0]=Barcelona array[1]=34
的Javadoc
StringTokenizer是一个遗留类,出于兼容性原因而保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人都使用String的split方法或java.util.regex包。
<强>更新强>
正如@madhairsilence指出的那样
你需要另一个分隔符。您可以使用=
属性文件
"Real Madrid =34".split("=");//will return you Array of Strings where
array[0]=Real Madrid, array[1]=34
您可以在阅读文件时使用Scanner。
答案 1 :(得分:0)
您可以使用java.util.Scanner类从文件中读取数据。它有像nextInt(),nextDouble这样的方法......在你的情况下可能会有用。
Scanner scan = new Scanner(file);
int number;
if(scan.hasNextInt()){
number = scan.nextInt();
}
答案 2 :(得分:0)
与AmitD一样,我同意在这种情况下使用split
更合适,但如果您仍然想使用StringTokenizer
,请执行以下操作:
StringBuilder teamName=new StringBuilder();
for (int i = 0; i < countOfTokens-1; i++)
{
if (i>0) teamName.append(' ');
teamName.append(sort.nextToken());
}
teamNames[k]=teamName.toString(); //add the new team to your teamNames array
points[k]=Integer.parseInt(sort.nextToken()); //if your points array is of int type
答案 3 :(得分:0)
String readLine = "Real Madrib 40";
String[] team = readLine.split( "\\d" );
System.out.println(team[0]);
String score = readLine.replace( team[0],"" );
System.out.println(score);
输出
团队[0]:真正的Madrib
得分:40