gpt4 book ai didi

java - 多个 .replace 给出 NoSuchElementException

转载 作者:行者123 更新时间:2023-12-01 04:47:23 25 4
gpt4 key购买 nike

编辑:整个方法是:

        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();
}
}

我想要实现该方法返回包含要读入的 Matrix3[0] 行 block 的数组 multiplet。该方法必须将该行分块为如下所述,因此当遇到“)”或“|”时。

当我尝试读取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)|

程序给出 block

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第2769章 矩阵3[0][0] = s2.useDelimiter("U").next();

主要[1]步骤

Step completed: "thread=main", IOguitar.singlemultiplet(), line=2,770 bci=322 2,770 multiplet[i] = matrix3[0][0];

主要[1]步骤

Step completed: "thread=main", IOguitar.singlemultiplet(), line=2,767 bci=333 2,767 for (int i = 0; i < cmampluszeros; i++)

主要[1]步骤

Step completed: Breakpoint hit: "thread=main", IOguitar.singlemultiplet(), line=2,769 bci=306 2,769 matrix3[0][0] = s2.useDelimiter("U").next();

主要[1]步骤

Step completed: "thread=main", IOguitar.singlemultiplet(), line=2,770 bci=322 2,770 multiplet[i] = matrix3[0][0];

主要[1]步骤

Step completed: "thread=main", IOguitar.singlemultiplet(), line=2,767 bci=333 2,767 for (int i = 0; i < cmampluszeros; i++)

主要[1]步骤

Step completed: Breakpoint hit: "thread=main", IOguitar.singlemultiplet(), line=2,769 bci=306 2,769 matrix3[0][0] = s2.useDelimiter("U").next();

主要[1]步骤

Step completed: "thread=main", IOguitar.singlemultiplet(), line=2,770 bci=322 2,770 multiplet[i] = matrix3[0][0];

主要[1]步骤

Step completed: "thread=main", IOguitar.singlemultiplet(), line=2,767 bci=333 2,767 for (int i = 0; i < cmampluszeros; i++)

主要[1]步骤

Step completed: Breakpoint hit: "thread=main", IOguitar.singlemultiplet(), line=2,769 bci=306 2,769 matrix3[0][0] = s2.useDelimiter("U").next();

主要[1]步骤

Step completed: "thread=main", IOguitar.singlemultiplet(), line=2,770 bci=322 2,770 multiplet[i] = matrix3[0][0];

主要[1]步骤

Step completed: "thread=main", IOguitar.singlemultiplet(), line=2,767 bci=333 2,767 for (int i = 0; i < cmampluszeros; i++)

主要[1]步骤

Step completed: Breakpoint hit: "thread=main", IOguitar.singlemultiplet(), line=2,769 bci=306 2,769 matrix3[0][0] = s2.useDelimiter("U").next();

主要[1]步骤

Step completed: "thread=main", IOguitar.singlemultiplet(), line=2,770 bci=322 2,770 multiplet[i] = matrix3[0][0];

主要[1]步骤

Step completed: "thread=main", IOguitar.singlemultiplet(), line=2,767 bci=333 2,767 for (int i = 0; i < cmampluszeros; i++)

主要[1]步骤

Step completed: Breakpoint hit: "thread=main", IOguitar.singlemultiplet(), line=2,769 bci=306 2,769 matrix3[0][0] = s2.useDelimiter("U").next();

主要[1]步骤

Step completed: "thread=main", IOguitar.singlemultiplet(), line=2,770 bci=322 2,770 multiplet[i] = matrix3[0][0];

主要[1]步骤

Step completed: "thread=main", IOguitar.singlemultiplet(), line=2,767 bci=333 2,767 for (int i = 0; i < cmampluszeros; i++)

主要[1]步骤

Step completed: Breakpoint hit: "thread=main", IOguitar.singlemultiplet(), line=2,769 bci=306 2,769 matrix3[0][0] = s2.useDelimiter("U").next();

主要[1]步骤

Step completed: "thread=main", IOguitar.main(), line=2,662 bci=35,573 2,662 e.printStackTrace();

主要[1]步骤

java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:838) at java.util.Scanner.next(Scanner.java:1347) at IOguitar.singlemultiplet(IOguitar.java:2769) at IOguitar.countmultipletn(IOguitar.java:3121) at IOguitar.main(IOguitar.java:187)

步骤已完成:“thread=main”,IOguitar.main(),line=2,668 bci=35,5782,668 }

主[1]

但是我现在该怎么办?

最佳答案

Regular expressions是处理这种解析的更简单的方法(它就是为此而设计的!)。 String 有一个方便的方法,split(String regex),它可以根据需要分割字符串,并将其放入字符串数组中,就像您想要的那样。下面这行代码就可以解决这个问题:

String[] multiplet = "(A#,A#,A#),(B#,B#,C#),(B#,B#,C#),(Bb,Bb,Cb)|(Ab,Ab,Ab),(Bb,Bb,Cb),(Bb,Bb,Cb),(Bb,Bb,Cb)|".split("(\\)|\\|)+");

正则表达式的解释:

\\)

\\) 进行转义,因此它是一个文字“)”

|

这意味着正则表达式语言中的 or 。

\\|

文字“|”

("|" or ")")+

+ 表示括号内的任何内容都应该至少出现一次并且是贪婪的(因此如果有两个或多个)或 |相邻的它将在所有它们上分开,并且在它们之间不留下空字符串。

关于java - 多个 .replace 给出 NoSuchElementException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15604619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com