我一直在寻找一些帮助,因为我对如何实现这一点束手无策。
作业是读入一个文件,其中包含州名、州长和他获得的补偿。
文件示例:
California Tim John $50,000 $78,890 $30,000
North Dakota John Jones $30,000 $40,000 $56,000
Washington Susan K. Bones $30,000 $40,000 $56,000
如你所见,一个名字可以包含三个以上的单词(包括中间的首字母)
我应该得到的输出是总裁姓名后跟总薪酬..
输出示例:
Susan K. Bones 126,000 美元
我已经编写了打印出总薪酬的代码。但我坚持读名字。如何忽略最多两个单词的州名,只取州长的名字?
这是我的总补偿代码。
另请注意:我必须对此使用扫描仪。
Scanner in = new Scanner(file);
in.nextLine();
do {
double totalCompensation = 0.0;
String readLine = in.nextLine();
readLine = readLine.replaceAll(",", "").replace("$", " ");
String presidentName = "";
Scanner readNumber = new Scanner(readLine);
while(readNumber.hasNext()) {
if (readNumber.hasNextDouble())
totalCompensation += readNumber.nextDouble();
else {
readNumber.next();
}
}
另一个注意事项:别担心,我确实有一段时间(in.hasNextLine())来关闭 do 循环,稍后在我的代码中。我真的不想粘贴整个内容。
欢迎任何提示!谢谢!
最佳答案
如果您提前知道您只会看到美国的州名,您可以让您的代码首先查找州名。既然你知道哪部分是州名,哪部分是赔款,那么剩下的一定是州长的名字。只有 50 个州,所以这并不是不可能的困难。
如果这更通用并且可以是城市/国家/其他任何事物而不仅仅是美国,则没有更好的分隔符(或引号来定义“州名称”和“州长名称”)就无法区分。
编辑:您提到还有一个进一步的要求,即“领导者”姓名的格式为“Firstname LastName”“Firstname M. Lastname”或“F. Middlename Lastname”。现在你已经有足够的时间来解决这个问题了。
当你用扫描仪拉出字符串时,将它们放在一个列表中(或者如果你学习了这种数据类型,堆栈更合适)。向后浏览列表。如果第二个元素是首字母,则您知道该名称由三部分组成。如果第三个元素是首字母,你就知道这个名字有三个部分。如果两者都不是首字母,则您知道该名称有两个部分。凡不是领袖名字的,就是地方的名字。
关于java - 扫描仪帮助 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9346655/