1

我通过标准输入提交以下输入:

4 2

30个

30 两个

15 三

25 四

我的代码是:

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

        BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
        String submittedString;
        System.out.flush();
        submittedString = stdin.readLine();

        zipfpuzzle mySolver = new zipfpuzzle();
        mySolver.getTopSongs(submittedString);

    }

哪个电话:

//Bringing it all together
    public String getTopSongs(String myString) {

        setUp(myString);
        calculateQuality();
        qualitySort();
        return titleSort();

    }

哪个电话

public void setUp(String myString) {

    String tempString = myString;

    //Creating array where each element is a line
    String[] lineExplode = tempString.split("\\n+");

    //Setting up numSongsAlbum and songsToSelect
    String[] firstLine = lineExplode[0].split(" ");
    numSongsAlbum = Integer.parseInt(firstLine[0]);
    songsToSelect = Integer.parseInt(firstLine[1]);

    System.out.println(lineExplode.length);
//etc
}

但是,由于某种原因 lineExplode.length 返回值 1 ...有什么建议吗?

亲切的问候,达里奥

4

5 回答 5

2
String[] lineExplode = tempString.split("\\n+");

String#split 的参数是一个包含正则表达式的字符串

于 2013-04-01T15:21:38.390 回答
1

您的String#split正则表达式将在带有换行符的字符串上工作。

String[] lineExplode = tempString.split("\n");

问题是您tempString没有这些字符,因此数组的大小是1.

为什么不把 readLine 放在一个循环中并将字符串添加到 ArrayList

String submittedString;
while (!(submittedString= stdin.readLine()).equals("")) {
   myArrayList.add(submittedString);
}
于 2013-04-01T15:33:06.620 回答
0

您应该使用“\\n”字符以换行符分隔,但请检查并非所有操作系统都使用相同的分隔符(http://en.wikipedia.org/wiki/Newline

为了解决这个问题,系统属性line.separator非常有用,它包含运行应用程序的当前操作系统的当前分隔符。

你应该使用:

String[] lineExplode = tempString.split("\\\\n");

使用 \n 作为分隔符

或者:

String lineSeparator = System.getProperty("line.separator");
String[] lineExplode = tempString.split(lineSeparator);

使用当前操作系统分隔符

或者:

String lineSeparator = System.getProperty("line.separator");
String[] lineExplode = tempString.split(lineSeparator + "+");

使用当前操作系统分隔符并需要一项

于 2013-04-01T15:27:46.800 回答
0

最好以这种方式使用这种拆分:

String[] lineExplode = 
       tempString.split(Pattern.quote(System.getProperty("line.separator")) + '+');

为了保持这种拆分在新线平台上独立

更新:查看您发布的代码后,很明显 OP 仅在此行中读取一行(直到 \n):

 submittedString = stdin.readLine();

并且没有循环从输入中读取更多行。

于 2013-04-01T15:26:01.083 回答
0

您确定该文件使用的是 UNIX 样式的行尾 (\n) 吗?对于跨平台拆分,请使用:

String[] lineExplode = tempString.split("[\\n\\r]+");
于 2013-04-01T15:26:15.297 回答