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