Java 在新行上拆分数组

Java 在新行上拆分数组,java,Java,我通过stdin提交以下输入: 4.2 31 302 一五三 25四 我的代码是: public static void main(String[] args) throws IOException { BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); String submittedString; System.out.flush();

我通过stdin提交以下输入:

4.2

31

302

一五三

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。。。有什么建议吗

亲切问候,, 达里奥


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

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

String[] lineExplode = 
       tempString.split(Pattern.quote(System.getProperty("line.separator")) + '+');
将此拆分保持在新行独立于平台的

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

 submittedString = stdin.readLine();

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

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

String[] lineExplode = tempString.split("[\\n\\r]+");
您应该使用“\\n”字符以新行分隔,但请检查并非所有操作系统都使用相同的分隔符()

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

你应使用:

String[] lineExplode = tempString.split("\\\\n");
使用\n作为分隔符

或:

使用当前操作系统分隔符

或:

使用当前操作系统分隔符并需要一个项,您的
字符串#split
正则表达式将在带有换行符的字符串上工作

String[] lineExplode = tempString.split("\n");
问题是
tempString
没有这些字符,因此数组的大小是
1

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

String submittedString;
while (!(submittedString= stdin.readLine()).equals("")) {
   myArrayList.add(submittedString);
}

我已将其更改为String[]lineExplode=tempString.split(“\\n”);但我还是一样result@DarioPanada尝试使用字符串[]lineExplode=tempString.split(\\n+);也这样做:)让我知道如果你展示你的完整代码,了解你的问题会更好。@DarioPanada你在这里只读了一行。你试过了吗:
str.split(Pattern.quote(System.getProperty(“line.separator”)+“+”)
就像我在回答中建议的那样?但这是怎么回事?啊,你只读了一行(直到
\n
)在此行中:
submittedString=stdin.readLine()
我没有看到任何循环。但是我不明白我提供的输入是如何在多行上进行的,但是使用
BufferedReader#readLine
读取的行不包括换行符,好吧,那么这很有意义……我可以使用什么来代替呢?对于我需要的内容,输入需要通过stdin提供,为什么不把
r在循环中使用eadLine
,并将字符串添加到
ArrayList
?这样就不需要拆分它们了
String lineSeparator = System.getProperty("line.separator");
String[] lineExplode = tempString.split(lineSeparator + "+");
String[] lineExplode = tempString.split("\n");
String submittedString;
while (!(submittedString= stdin.readLine()).equals("")) {
   myArrayList.add(submittedString);
}