Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串替换_Java_String_Flags - Fatal编程技术网

Java 字符串替换

Java 字符串替换,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。您当前的问题是替换条目的顺序。

你好。所以我想问你们如何改变我从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 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”),但是如何继续,这样我就不会像以前那样有共线了?