Java 在新行上拆分数组
我通过stdin提交以下输入: 4.2 31 302 一五三 25四 我的代码是: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();
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);
}