首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串替换(字符串)

字符串替换(字符串)
EN

Stack Overflow用户
提问于 2014-10-31 14:17:17
回答 3查看 102关注 0票数 1

日安。因此,我想问您如何在从JEditorPane获得的字符串中更改子字符串。

我为和弦的变化做了一个程序,C到C#,C# to D,D# to E,E to F,F to F#,F# to G,G to G#,.

我编写了代码,但是如果我用end.For编写JEditorPane的话,它总是从乞讨到JEditorPane示例。

“C D# E”- F#。我如何才能只做一个步骤的更改(只有C到C#,D#到E,E到F)?

代码语言:javascript
复制
if (event.getSource()== ok)
{
    Object contents = akordib.getSelectedItem();
    if (contents == "+1 step")
    {
        finalStr = textPanel.getText();
        if (finalStr.contains(" C ") == true)
        {
            finalStr = finalStr.replaceAll(" C" , " C#");
            textPanel.setText(finalStr);
        }

        if (finalStr.contains(" C# ") == true)
        {
            finalStr = finalStr.replaceAll(" C# ", " D ");
            textPanel.setText(finalStr);
        }
    }   
}

下面是一个例子:原文:

C D# E

在守则之后应该是:

C# E、F

EN

回答 3

Stack Overflow用户

发布于 2014-10-31 14:20:04

用另一种方式写。正在发生这种情况,因为在测试C#时,您已经将C设置为C#。

票数 2
EN

Stack Overflow用户

发布于 2014-10-31 14:37:07

您当前的问题是您要替换条目的顺序。当你一开始

代码语言:javascript
复制
C D# E

并将每个C替换为C#,您的变量将包含

代码语言:javascript
复制
C# D# E

如果然后将所有C#替换为D,则变量将包含

代码语言:javascript
复制
D D# E

等。

在另一个方向上替换它们将解决问题,例如,首先将C#替换为D,然后才将C替换为C#。

唯一棘手的部分是,您需要能够绕过并替换H到C。解决方案是从用X替换H开始(或任何其他没有出现的字符),按照正确的顺序执行所有其他替换,最后一步用C替换X。

票数 1
EN

Stack Overflow用户

发布于 2014-10-31 15:13:32

首先,您可能不应该使用final作为变量的名称,因为final是Java中的关键字。

其次,您可能应该在一个空格上拆分字符串,然后循环这个数组,每个音符跳半步。

代码语言:javascript
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26676816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档