2013-12-08 33 views
1

所以我在我的任务中遇到了一些麻烦。我似乎无法弄清楚我需要做什么。这里是一个问题:字符串方法java任务

阅读积分的分配基础如下:前三本书每本价值10分。接下来的三本书每本都值15分。所有读过六本书的书都各得20分。一个读7本书的学生将被授予95分(前三名加30,后三名加45,第七本为20)。

一个外部文件中包含一个姓氏和名字,然后一个整数(图书的数量读取)

打印在每个人的名字,图书的数量读取,并获得积分。名字应该是最后的顺序,首先是所有大写字母中的唯一姓。在列表底部打印出所有读者和比赛获胜者的平均积分。

语句所需:输入,输出,决策,环控制,字符串

数据位置:prog700c.dat

样本输出:

Reading Contest 

Name  Books Points 

SUMMER Sam 4  45 

LAZY Linda 2  20 

PRODDER Paul 5 60 

MASTER K.C. 8 115 

READER Richie 6 75 

Average points per reader = 63.0 
The winner of the contest is K.C. Master 

外部文件数据是这样的:

SUMMER Sam 4 

LAZY Linda 2 

PRODDER Paul 5 

MASTER K.C. 8 

READER Richie 6 

我的当前代码:

import java.io.*; 
import java.util.*; 
public class Prog505a 
{ 
    public static void main(String[] args) 
    { 
     Scanner kbReader = new Scanner(new File("C:\\Users\\Guest\\Documents\\java programs\\Prog700c\\Prog700c.in")); 
    String data = kbReader.nextLine(); 
    while(kbReader.hasNextLine()) 
    { 

我遇到一个问题,我不知道用什么字符串方法只从外部文件中获取数字以便在计算中使用它们。我知道我可以做决策等,但我只是不知道该如何处理这一部分,以便只从外部文件中获取数字。如果有人能提供某些方向或指导,将不胜感激。谢谢!

+1

您需要解析字符串并提取您需要的值。你可以使用正则表达式。 –

+0

Integer#parseInt(String)应该有帮助。 HTTP://文档。oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String) – blackpanther

+1

由于您使用[Scanner](http://docs.oracle.com/javase/) 7/docs/api/java/util/Scanner.html),您可以使用它的方法[hasNexInt](http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNextInt ())和[nextInt](http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt())来获得解析的整数,为姓和名可以'hasNext'和'next'。 – A4L

回答

2

您可以使用String.split("\\s+")将该行分成三部分(检查它们是否是三个部分以确保不打印警告,如果不是则跳过)。这将返回一个字符串数组。您可以使用Integer.parseInt()来读取数组中第三项图书的数量(位置2,Java中的数组“基于零”)。

请注意,"\\s+"是一个正则表达式,它可以找到一个或多个空白部分。空白字符串和字符串的开始/结尾处的字符串被返回。如果不允许正则表达式,请尝试查找字符串中空格字符的索引,并使用String.substring() - 并且不要忽略字符串操作的返回值。

或者,您可以在扫描仪中使用next(),next()nextInt()而不是nextLine()

+0

我的答案有什么问题吗?请在我的或Doroskevics的答案中指出缺少或点击接受。 –

0

你可以使用正则表达式来提供你在说什么: 尝试使用类似:

str = str.replaceAll("\\D+",""); 

这样,您将删除所有非数字的字符串。之后,您需要将字符串解析为整数或任何其他数字类型。

+0

这会起作用,但我不确定这个解决方案是否是一个好的解决方案。想象一下,如果后续问题将由包含“READER Dorosckevic(1)4”的行组成......换句话说,它不会缩放。 –

+0

我会创建一个额外的字符串来保存该数据并对该特定字符串进行操作。 –

+0

这是一个很好的横向思维 - 在编程期间这可能非常重要 - 但有时它与良好的问题分解相反。首先分裂成单独的元素似乎是要走的路... –