Java 使用replace方法仅替换一个字符或字符串
我的问题是我只想替换一个特定的字符或字符串的一部分,而不是同一个字符的其余部分 我的例子Java 使用replace方法仅替换一个字符或字符串,java,string,replace,Java,String,Replace,我的问题是我只想替换一个特定的字符或字符串的一部分,而不是同一个字符的其余部分 我的例子 char one = '#'; char two = '#'; char three = '#'; char four = '#'; char five = '#'; char six = '#'; char seven = '#'; char eight = '#'; char nine = '#'; String chart = "\n"+ one + two + three + "\n" + fou
char one = '#';
char two = '#';
char three = '#';
char four = '#';
char five = '#';
char six = '#';
char seven = '#';
char eight = '#';
char nine = '#';
String chart = "\n"+ one + two + three + "\n" + four + five + six + "\n"+ seven
+ eight + nine + "\n\n";
chart = chart.replace(five, '/');
System.out.print(chart);
它输出://////
而不是:######/####
感谢您的帮助 接受两个参数-要替换的字符和要替换的字符。由于所有字符都相同,因此不希望使用
replace
方法,而是使用substring
方法 接受两个参数-要替换的字符和要替换的字符。由于所有字符都相同,因此不希望使用
replace
方法,而是使用substring
方法 从字符串创建一个StringBuilder对象,并使用charAt方法
然后调用toString
int replacePosition = 5;//Choose it.
String inputStr = getYourString();
StringBuilder sb = new StringBuilder(inputStr);
sb.chrAt(replacePosition);
String result = sb.toString();
如果您有一个字符串,并且只想替换其重复至少n次的单个字符,并替换其第n次出现(在您的示例中为5次),则需要首先找到其位置,然后使用StringBuilder.charAt()应用解决方案
要查找角色的索引,您可以简单地循环使用charters,或者使用方法indexOf()
n
如果上一个indexOf为正值,则每次使用上一次调用中的新起始位置执行次。从字符串创建一个StringBuilder对象,并使用charAt方法
然后调用toString
int replacePosition = 5;//Choose it.
String inputStr = getYourString();
StringBuilder sb = new StringBuilder(inputStr);
sb.chrAt(replacePosition);
String result = sb.toString();
如果您有一个字符串,并且只想替换其重复至少n次的单个字符,并替换其第n次出现(在您的示例中为5次),则需要首先找到其位置,然后使用StringBuilder.charAt()应用解决方案
要查找角色的索引,您可以简单地循环使用charters,或者使用方法indexOf()
n
如果上一个indexOf为正值,则每次使用上一次调用的新起始位置执行次数。这应该可以:
MatchResult findNthOccurance(int n, Pattern p, CharSequence src){
Matcher m = p.matcher(src);
for(int i = 0; i<n; i++) m.find();
return m;
}
MatchResult findNthOccurance(int n,Pattern p,CharSequence src){
匹配器m=p.Matcher(src);
对于(int i=0;i这应该可以:
MatchResult findNthOccurance(int n, Pattern p, CharSequence src){
Matcher m = p.matcher(src);
for(int i = 0; i<n; i++) m.find();
return m;
}
MatchResult findNthOccurance(int n,Pattern p,CharSequence src){
匹配器m=p.Matcher(src);
对于(int i=0;iInposition
变量,存储要替换的事件数。与您的情况一样,您尝试替换第5个,因此现在将其存储为5
Pattern p = Pattern.compile("#");
Matcher m = p.matcher(chart);
int count = 0;
int position = 5;
int index = 0;
while (m.find()) {
count++;
if (count == position - 1) {
index = m.end();
}
}
String regex = "([#\n]{" + index + "})(#)([#\\n]{1,})";
chart = chart.replaceAll(regex, "$1/$3");
System.out.println(chart);
我在这里做的是,首先我会找到第n-1次出现的字符的结尾,并将其存储在索引中。然后在replaceAll中,我有一个正则表达式,它将字符串分为三部分,一部分在要替换的字符之前,另一部分只包含第n次出现的一个字符,最后一部分包含remaining.$1/$3
意味着将整个字符串替换为group1,然后是/,然后是group3,在位置
变量中存储要替换的发生次数。在您的例子中,您试图替换第5次,因此现在将其存储为5次
Pattern p = Pattern.compile("#");
Matcher m = p.matcher(chart);
int count = 0;
int position = 5;
int index = 0;
while (m.find()) {
count++;
if (count == position - 1) {
index = m.end();
}
}
String regex = "([#\n]{" + index + "})(#)([#\\n]{1,})";
chart = chart.replaceAll(regex, "$1/$3");
System.out.println(chart);
s = s.replaceFirst("((#[^#]*){5})#", "$1/") ;
我在这里做的是,首先我会找到第n-1次出现的字符的结尾,并将其存储在索引中。然后在replaceAll中,我有一个正则表达式,它将字符串分为三部分,一部分在要替换的字符之前,另一部分只包含第n次出现的一个字符,最后一部分包含remaining.$1/$3
表示将整个字符串替换为group1,然后替换为/,再替换为group3
s = s.replaceFirst("((#[^#]*){5})#", "$1/") ;
这将用/(第一次)替换第六次出现的#,实际搜索5组#…,然后是#
虽然慢但短
这将用/(第一次)替换第六次出现的#,实际搜索5组#…,然后是#
虽然慢但短