编辑: 整个方法是:
public static String[] singlemultiplet(String filename, int numofzeros) throws IOException {//isolate notes between brackets
Scanner inputmeasure = new Scanner(new DataInputStream(new FileInputStream(filename)));
InputStream is = new BufferedInputStream(new FileInputStream(filename));
BufferedReader bReader = new BufferedReader(new InputStreamReader(is));
StringBuffer sbfFileContents = new StringBuffer();
String line = null;
int lineCount = 0;
int j = 0;
int[] cmn = new int[countbrackets(filename)];
String[] numbers = new String[40];
String[][] matrix = new String[20][120];
String[][] matrix2 = new String[20][120];
String[][] matrix3 = new String[20][120];
line = inputmeasure.useDelimiter("\n").next();
Scanner s = new Scanner(line).useDelimiter("U");
matrix[0][0] = s.useDelimiter("\r").next();
String ubar = "U|";
matrix2[0][0] = matrix[0][0].replace("\\),","U").replaceAll("\\)","U").replace(ubar,"U");
matrix3[0][0] = matrix2[0][0].replace("|","U");
Scanner s2 = new Scanner(matrix3[0][0]).useDelimiter("U");
String brack = "(";
String[] multiplet = new String[countmultipletsandmeasures(filename) + numofzeros];
String[] multiplet2 = new String[countmultipletsandmeasures(filename) + numofzeros];
Arrays.fill(multiplet, "");
int cmampluszeros = countmultipletsandmeasures(filename) + numofzeros;
for (int i = 0; i < cmampluszeros; i++)
{
matrix3[0][0] = s2.useDelimiter("U").next();
multiplet[i] = matrix3[0][0];
}
lineCount++;
sbfFileContents.append(line);
String strContent = sbfFileContents.toString();
try {
return multiplet;
} finally {
is.close();
}
}
我想实现该方法返回multiplet
包含Matrix3[0]
要读入的行块的数组。该方法必须将行分块,如下所述,因此在遇到“)”或“|”时。
当我尝试阅读以下内容的第一行时Matrix3[0]
:
(A#,A#,A#),(B#,B#,C#),(B#,B#,C#),(Bb,Bb,Cb)|(Ab,Ab,Ab),(Bb,Bb,Cb),(Bb,Bb,Cb),(Bb,Bb,Cb)|
程序给出块
multiplet[i]
作为
multiplet: (A#,A#,A#
multiplet: ,(B#,B#,C#
multiplet: ,(B#,B#,C#
multiplet: ,(Bb,Bb,Cb
multiplet: (Ab,Ab,Ab
multiplet: ,(Bb,Bb,Cb
multiplet: ,(Bb,Bb,Cb
multiplet: ,(Bb,Bb,Cb
哪个是对的。但是当我尝试读入时:
(A#,A#,A#),(B#,B#,C#),(B#,B#,C#),(Bb,Bb,Cb)|A#,B#,C#,D#, E#,F#,G#, | ,A, , , , , , , , , , , , , , |
我得到一个NoSuchElementException
. 正确的输出是:
multiplet: (A#,A#,A#
multiplet: ,(B#,B#,C#
multiplet: ,(B#,B#,C#
multiplet: ,(Bb,Bb,Cb
multiplet: A#,B#,C#,D#, E#,F#,G#,
multiplet: ,A, , , , , , , , , , , , , ,
有谁知道为什么以及我应该怎么做才能获得正确的输出?
编辑:
调试会给我以下堆栈跟踪:
断点命中:"thread=main", IOguitar.singlemultiplet(), line=2,769 bci=306 2,769 matrix3[0][0] = s2.useDelimiter("U").next();
主[1]步骤
步骤完成:“thread=main”, IOguitar.singlemultiplet(), line=2,770 bci=322 2,770 multiplet[i] = matrix3[0][0];
主[1]步骤
步骤完成:“thread=main”, IOguitar.singlemultiplet(), line=2,767 bci=333 2,767 for (int i = 0; i < cmampluszeros; i++)
主[1]步骤
步骤完成:断点命中:"thread=main", IOguitar.singlemultiplet(), line=2,769 bci=306 2,769 matrix3[0][0] = s2.useDelimiter("U").next();
主[1]步骤
步骤完成:“thread=main”, IOguitar.singlemultiplet(), line=2,770 bci=322 2,770 multiplet[i] = matrix3[0][0];
主[1]步骤
步骤完成:“thread=main”, IOguitar.singlemultiplet(), line=2,767 bci=333 2,767 for (int i = 0; i < cmampluszeros; i++)
主[1]步骤
步骤完成:断点命中:"thread=main", IOguitar.singlemultiplet(), line=2,769 bci=306 2,769 matrix3[0][0] = s2.useDelimiter("U").next();
主[1]步骤
步骤完成:“thread=main”, IOguitar.singlemultiplet(), line=2,770 bci=322 2,770 multiplet[i] = matrix3[0][0];
主[1]步骤
步骤完成:“thread=main”, IOguitar.singlemultiplet(), line=2,767 bci=333 2,767 for (int i = 0; i < cmampluszeros; i++)
主[1]步骤
步骤完成:断点命中:"thread=main", IOguitar.singlemultiplet(), line=2,769 bci=306 2,769 matrix3[0][0] = s2.useDelimiter("U").next();
主[1]步骤
步骤完成:“thread=main”, IOguitar.singlemultiplet(), line=2,770 bci=322 2,770 multiplet[i] = matrix3[0][0];
主[1]步骤
步骤完成:“thread=main”, IOguitar.singlemultiplet(), line=2,767 bci=333 2,767 for (int i = 0; i < cmampluszeros; i++)
主[1]步骤
步骤完成:断点命中:"thread=main", IOguitar.singlemultiplet(), line=2,769 bci=306 2,769 matrix3[0][0] = s2.useDelimiter("U").next();
主[1]步骤
步骤完成:“thread=main”, IOguitar.singlemultiplet(), line=2,770 bci=322 2,770 multiplet[i] = matrix3[0][0];
主[1]步骤
步骤完成:“thread=main”, IOguitar.singlemultiplet(), line=2,767 bci=333 2,767 for (int i = 0; i < cmampluszeros; i++)
主[1]步骤
步骤完成:断点命中:"thread=main", IOguitar.singlemultiplet(), line=2,769 bci=306 2,769 matrix3[0][0] = s2.useDelimiter("U").next();
主[1]步骤
步骤完成:“thread=main”, IOguitar.singlemultiplet(), line=2,770 bci=322 2,770 multiplet[i] = matrix3[0][0];
主[1]步骤
步骤完成:“thread=main”, IOguitar.singlemultiplet(), line=2,767 bci=333 2,767 for (int i = 0; i < cmampluszeros; i++)
主[1]步骤
步骤完成:断点命中:"thread=main", IOguitar.singlemultiplet(), line=2,769 bci=306 2,769 matrix3[0][0] = s2.useDelimiter("U").next();
主[1]步骤
步骤完成:“thread=main”, IOguitar.main(), line=2,662 bci=35,573 2,662 e.printStackTrace();
主[1]步骤
在 IOguitar.singlemultiplet(IOguitar.java:2769) 在 IOguitar.countmultipletn 在 java.util.Scanner.next(Scanner.java:1347) 在 java.util.Scanner.throwFor(Scanner.java:838) 的 java.util.NoSuchElementException (IOguitar.java:3121) 在 IOguitar.main(IOguitar.java:187)
步骤完成:“thread=main”, IOguitar.main(), line=2,668 bci=35,578 2,668 }
主要[1]
但是我现在该怎么办?