Java 字符串替换
你好。所以我想问你们如何改变我从JEditorPane得到的字符串中的子字符串 我正在制作一个和弦变化的程序,根据这个:C到C,C到D,D到E,E到F,F到F,F到G,G到G 我写了代码,但它总是从乞讨到结束。例如,如果我在JEditorPane中写: “cd#E”这一切都归F#。我怎样才能只更改一个步骤(从C到C,从D到E,从E到F) 以下是一个例子: 原件: C D#E 代码后应为: C#E FJava 字符串替换,java,string,flags,Java,String,Flags,你好。所以我想问你们如何改变我从JEditorPane得到的字符串中的子字符串 我正在制作一个和弦变化的程序,根据这个:C到C,C到D,D到E,E到F,F到F,F到G,G到G 我写了代码,但它总是从乞讨到结束。例如,如果我在JEditorPane中写: “cd#E”这一切都归F#。我怎样才能只更改一个步骤(从C到C,从D到E,从E到F) 以下是一个例子: 原件: C D#E 代码后应为: C#E F 反过来写。这种情况正在发生,因为在测试C#时,您已经将C设置为C。您当前的问题是替换条目的顺序。
反过来写。这种情况正在发生,因为在测试C#时,您已经将C设置为C。您当前的问题是替换条目的顺序。当你开始
C D# E
并将每个C替换为C#,变量将包含
C# D# E
D D# E
如果将所有的C#替换为D,那么变量将包含
C# D# E
D D# E
等等
将它们换成另一个方向可以解决这个问题,例如,先将C换成D,然后再将C换成C
唯一棘手的部分是,您需要能够将H替换为C。解决方法是首先将H替换为X(或任何其他未出现的字符),按照正确的顺序进行所有其他替换,最后一步再次将X替换为C。首先,您可能不应该使用
final
作为变量名,因为final
在Java中是一个关键字
其次,您可能应该在空格上拆分字符串,然后在该数组中循环,将每个音符碰撞半步
String notes = textPanel.getText();
String[] notesArr = notes.split(" ");
StringBuilder newNotes = new StringBuilder();
for(int i=0; i < notesArr.length; i++) {
String newNote = moveHalfStep(notesArr[i]);
newNotes.append(newNote);
newNotes.append(" ");
}
textPanel.setText(newNotes.toString());
private String moveHalfStep(String note) {
String newNote = "";
if(note.contains("#")) {
char[] noteChars = note.toCharArray();
char noteChar = noteChars[0];
noteChar++;
if(noteChar == 'H') {
noteChar = 'A';
}
newNote = String.valueOf(noteChar);
} else {
newNote = note + "#";
}
return String.valueOf(newNote);
}
String notes=textPanel.getText();
字符串[]notesar=notes.split(“”);
StringBuilder newNotes=新StringBuilder();
for(int i=0;i
或“if-else-chaining”是的,但它应该一直存在。所以整个过程是这样的:CtoC#,C#toD,DtoD#,D#toE,EtoF,FtoF#,F#toG,GtoG#,G#toA,AtoA#,A#toH和HtoC。final
是一个关键字,不应该用作变量名。它只是用于这里,在我的代码中称为konacno。更改代码时要小心因为人们可能会看到:这段代码甚至没有编译,只是跳过了这个问题……我同意@WarrenFaith的两条评论。final不应用于变量名。第二,正如他在另一篇评论中所说,将这些独立的if语句更改为if-else链可能是最简单的解决方案。只有一个问题,所以,我应该这样说:replaceAll(“C”,“C”),replaceAll(“C”,“C”),但是如何继续,这样我就不会像以前那样有共线了?