Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_Replace - Fatal编程技术网

Java 替换引用字符串中的部分字符串

Java 替换引用字符串中的部分字符串,java,string,replace,Java,String,Replace,我有一个字符串数组列表,由字母表和数字组成,数字作为每个字母表的后缀 ArrayList <String> baseOctave = new ArrayList(); baseOctave.add("S1"); baseOctave.add("R2"); baseOctave.add("G4"); baseOctave.add("M2"); baseOctave.add("P3"); baseOctave.add("D1"); baseOctave.add("N1"); 因此,在对

我有一个字符串数组列表,由字母表和数字组成,数字作为每个字母表的后缀

ArrayList <String> baseOctave = new ArrayList();
baseOctave.add("S1");
baseOctave.add("R2");
baseOctave.add("G4");
baseOctave.add("M2");
baseOctave.add("P3");
baseOctave.add("D1");
baseOctave.add("N1");
因此,在对象创建过程中使用的字母表可能包含数字作为后缀,也可能没有数字作为后缀

但是在构造函数内部或在单独的方法中,我想用带有后缀的字母替换这些简单的字母。后缀取自基八度音阶。 例如:obj1和obj2中的上述两个字符串应为S1、R2、M2-和S1、G4、M2、D1

我不得不这样做,但无法继续下面的代码。需要帮忙更换吗

 static void addSwaraSuffix(ArrayList<String> pattern) {

        for (int index = 0; index < pattern.size(); index++) {
            // Get the patterns one by one from the arrayList and verify and manipulate if necessary.
            String str = pattern.get(index);

            // First see if the second character in Array List element is digit or not.
            // If digit, nothing should be done. 
            //If not, replace/insert the corresponding index from master list
            if (Character.isDigit(str.charAt(1)) != true) {

                // Replace from baseOctave.

                str = str.replace(str.charAt(0), ?);    // replace with appropriate alphabet having suffix from baseOctave.

                // Finally put the str back to arrayList.
                pattern.set(index, str);
            }
        }
    }
编辑信息如下: 谢谢你的回答。我找到了另一个解决方案,效果很好。下面是我发现有效的完整代码。如果有任何问题,请告诉我

static void addSwaraSuffix(ArrayList<String> inputPattern, ArrayList<String> baseOctave) {
        String temp = "";
        String str;
        for (int index = 0; index < inputPattern.size(); index++) {
            str = inputPattern.get(index);
            // First see if the second character in Array List is digit or not.
            // If digit, nothing should be done. If not, replace/insert the corresponding index from master list
            // Sometimes only one swara might be there. Ex: S,R,G,M,P,D,N 
            if (((str.length() == 1)) || (Character.isDigit(str.charAt(1)) != true)) {
         // Append with index.
                // first find the corresponsing element to be replaced from baseOctave.
                for (int index2 = 0; index2 < baseOctave.size(); index2++) {
                    if (baseOctave.get(index2).startsWith(Character.toString(str.charAt(0)))) {
                        temp = baseOctave.get(index2);
                        break;
                    }

                }
                str = str.replace(Character.toString(str.charAt(0)), temp);

            }
            inputPattern.set(index, str);
        }
    }

我假设缩写词只有一个字符,在完整模式中,第二个字符总是数字。下面的代码依赖于这个假设,所以如果它们是错误的,请通知我

        static String replace(String string, Collection<String> patterns) {
            Map<Character, String> replacements = new HashMap<Character, String>(patterns.size());
            for (String pattern : patterns) {
                replacements.put(pattern.charAt(0), pattern);
            }

            StringBuilder result = new StringBuilder();

            for (int i = 0; i < string.length(); i++) {
                Character c = string.charAt(i);
                char next = i < string.length() - 1 ? string.charAt(i + 1) : ' ';

                String replacement = replacements.get(c);
                if (replacement != null && (next <= '0' || next >= '9')) {
                    result.append(replacement);
                } else {
                    result.append(c);
                }
            }

            return result.toString();
        }


        public static void main(String[] args) {
            ArrayList<String> baseOctave = new ArrayList<String>();
            baseOctave.add("S1");
            baseOctave.add("R2");
            baseOctave.add("G4");
            baseOctave.add("M2");
            baseOctave.add("P3");
            baseOctave.add("D1");
            baseOctave.add("N1");

            System.out.println(replace("S,,R.,M''-", baseOctave));
            System.out.println(replace("S1,G.,M,D1", baseOctave));
            System.out.println(replace("", baseOctave));
            System.out.println(replace("S", baseOctave));
        }

您的模式元素将始终是一个字符和一个数字?缩写词总是一个字符?正确。我有很多基本倍频程的例子,它总是有以下的组合:字母S,R,G,M,P,D,N后跟1-4位数字。示例:S1 R2 S4 G1 G4 M3 P1然而,为了便于操作,我的模式可能会省略这些后缀。因此,我将通过基本八度,然后是模式,以便根据基本八度,模式将被修改,以包括这些后缀。编辑的问题,因为我找到了替代解决方案后,看了你的答案。
        static String replace(String string, Collection<String> patterns) {
            Map<Character, String> replacements = new HashMap<Character, String>(patterns.size());
            for (String pattern : patterns) {
                replacements.put(pattern.charAt(0), pattern);
            }

            StringBuilder result = new StringBuilder();

            for (int i = 0; i < string.length(); i++) {
                Character c = string.charAt(i);
                char next = i < string.length() - 1 ? string.charAt(i + 1) : ' ';

                String replacement = replacements.get(c);
                if (replacement != null && (next <= '0' || next >= '9')) {
                    result.append(replacement);
                } else {
                    result.append(c);
                }
            }

            return result.toString();
        }


        public static void main(String[] args) {
            ArrayList<String> baseOctave = new ArrayList<String>();
            baseOctave.add("S1");
            baseOctave.add("R2");
            baseOctave.add("G4");
            baseOctave.add("M2");
            baseOctave.add("P3");
            baseOctave.add("D1");
            baseOctave.add("N1");

            System.out.println(replace("S,,R.,M''-", baseOctave));
            System.out.println(replace("S1,G.,M,D1", baseOctave));
            System.out.println(replace("", baseOctave));
            System.out.println(replace("S", baseOctave));
        }
 S1,,R2.,M2''-
 S1,G4.,M2,D1

 S1