【问题标题】:Read a txt file and compare values读取 txt 文件并比较值
【发布时间】:2018-12-08 10:41:36
【问题描述】:

在我的黑客马拉松回合中,有人要求我解决一个问题,即从服务器读取 .txt 文件,然后构建一个逻辑来读取它并打印该文件中给出的所有击球手的最高得分者。

txt 文件名为 cricket.txt,看起来像这样,

Rohit Sharma|264
M.S Dhoni|198
Rahul Dravid|235*

像这样每个球员的名字都在新行中,他们要我打印出局击球手的最高得分者和非出局击球手的最高得分者。 不出击球手得分手标记与星标记后跟他们的得分。 O/p 格式:

Rohit Sharma|264
Rahul Dravid|235*

你们能帮我解决这个问题吗,我已经尝试过以某种方式获取 Number FORmat 异常。

注意:不允许使用 Socket 读取文件。 (请在 Java 中执行以下操作)

我的代码如下(给我数字格式异常)。

public static void main(String[] args) throws IOException {
URL url = new URL("192.168.1.3:8003/cricket.txt");
String data = new Scanner( url.openStream() ).useDelimiter("\\A").next();
int temp = 0;
for(int i=0; i<spData.length; i++) {
    String[] ns = spData[i].split("\\|");
    int temp1 = Integer.parseInt(ns[1]);
    if(temp < temp1) {
        temp = temp1;
     }       
  }
  System.out.println("Highest score is"+temp);
}

我收到如下异常

Exception in thread "main" java.lang.NumberFormatException: For input                           string: "264
"   
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at interview.CricketScore.main(CricketScore.java:27)

然后我尝试这样做以纠正实际问题

public static void main(String[] args) throws IOException {
String s = "Rohit Sharma|264";
String[] spS = s.split("\\|");
int j = 0;          
j = Integer.parseInt(spS[1]);
System.out.println(j);
}

但是在这里我得到了正确的输出。为什么?如何?我也在那边做同样的事情,我正在收到异常。

【问题讨论】:

  • 遇到异常时正确的做法是不要辞职,问别人如何为你做任何事情。正确的做法是阅读异常的消息和堆栈跟踪,查看抛出的位置,异常的含义,找出抛出的原因,并修复代码。您还没有发布任何可以帮助您解决此问题的内容。
  • 是的,好像你说要添加代码,我也有添加的代码sn-p,请看一下。,我正在尝试将其类型转换为整数(例如:264 )然后 idk 264 是如何不正确地格式化为整数的。
  • 好的。所以异常告诉你它不能将 ns[1] 解析为整数,对吧?那么,你为什么不使用你的调试器,或者干脆在代码中添加一个 println(),或者简单想想你的代码在做什么,来知道 ns[1] 是什么,以及为什么它不能被解析为一个整数?您甚至不需要这样做,因为您没有费心发布(因此可能是阅读)的异常错误消息告诉您它是什么。阅读异常消息。
  • 学习使用调试器。您的拆分不正确。
  • 好的先生,谢谢你的建议,我再试一次。

标签: java string eclipse integer


【解决方案1】:

我得到的答案代码如下:

package interview;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;


public class CricketScore {

public static void main(String[] args) throws IOException {

   URL url = new URL("192.168.1.3:8003/cricket.txt");
   String data = new Scanner( url.openStream() ).useDelimiter("\\A").next();
   int out = 0;
    String outName = "";
    int nOut = 0;
    String nOutName = ""; 
    //System.out.println(data);
    String[] spData = data.split("\r");

    for(int i=0; i<spData.length; i++) {
        String[] ns = spData[i].split("\\|");
        if(ns[1].contains("*")==false) {
        int temp1 = Integer.parseInt(ns[1]);            
            if(out < temp1) {
                out = temp1;
                outName = ns[0];
            }
        }
    }
    for(int i=0; i<spData.length; i++) {
        String[] ns = spData[i].split("\\|");
        if(ns[1].contains("*")) {
            String temp1 = ns[1].replace("*", "");
            int temp2 = Integer.parseInt(temp1);            
            if(nOut < temp2) {
                nOut = temp2;
                nOutName = ns[0];
            }
        }
    }
    System.out.println("Highest scorer from the Out batsman is "+outName +"|"+out);
    System.out.println("Highest scorer from the Not Out batsman is "+nOutName+"|"+nOut);

}
}

【讨论】: