在不带正则表达式的java中,将每n个字符替换为“-”
我试图用一些特殊字符替换字符串中的每一个第n个字符,例如,基于输入int n和string str的值,我想用这个特殊字符替换n处的所有字符,比如2,4,6,这样字符串的长度就得以保持,这就是我到目前为止得到的结果,但它不能产生正确的输出在不带正则表达式的java中,将每n个字符替换为“-”,java,Java,我试图用一些特殊字符替换字符串中的每一个第n个字符,例如,基于输入int n和string str的值,我想用这个特殊字符替换n处的所有字符,比如2,4,6,这样字符串的长度就得以保持,这就是我到目前为止得到的结果,但它不能产生正确的输出 public String everyNth(String str, int n) { String result=""; for(int i=0; i<str.length(); i+=n){ resul
public String everyNth(String str, int n) {
String result="";
for(int i=0; i<str.length(); i+=n){
result += " " + str.charAt(i);
}
return result;
}
您可以使用一个将用输入字符串初始化的字符串,然后使用来修改给定的字符,这样可以避免在每次迭代时生成一个新字符串,就像您当前对字符串上的运算符+=所做的那样 比如:
public String everyNth(String str, int n) {
if (n < 1) {
throw new IllegalArgumentException("n must be greater than 0");
}
StringBuilder result = new StringBuilder(str);
// This will replace every nth character with '-'
for (int i = n - 1; i < str.length(); i += n) {
result.setCharAt(i, '-');
}
return result.toString();
}
首先,不能在Java字符串中替换。它们是不变的。因此,您必须创建一个具有正确属性的新字符串。有很多方法可以做到这一点,其中之一是迭代原始字符串并复制字符,除非当前索引是n的倍数。
您还可以将字符串转换为数组,在数组的每n个元素上循环并更改这些元素 您可以使用模数运算符%来实现您想要实现的目标,因此:
public String everyNth(String str, int n){
StringBuilder sb = new StringBuilder();
for(int i=0,n=str.length;i<n;i++){
if(i%n==0){
sb.append("-");
else{
sb.append(str.charAt(i);
}
}
return sb.toString();
}
你在代码中的什么地方替换了什么?模%操作符将是你最好的朋友。你的代码应该可以工作…为什么你不认为它产生了正确的结果?输入:测试,2个结果:t s。比我快。这可能是执行此任务最有效的方法,因为StringBuilder比串联多个Strings更有效。您可能希望让循环从i=n-1开始,除非您想从第一个字符开始替换,否则如何删除索引处的这些字符?-1。请阅读我提供的代码。我正在创建另一个新字符串来保存结果,因为我知道字符串是不可变的。
public String everyNth(String str, int n){
StringBuilder sb = new StringBuilder();
for(int i=0,n=str.length;i<n;i++){
if(i%n==0){
sb.append("-");
else{
sb.append(str.charAt(i);
}
}
return sb.toString();
}