我正在尝试用一些特殊字符替换字符串中的每个第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){
result += " " + str.charAt(i);
}
return result;
}
答案 0 :(得分:3)
您可以使用StringBuilder
来使用输入String
初始化,然后使用setCharAt(int index, char ch)
修改给定的字符,这样就可以避免构建新的append(CharSequence s, int start, int end)
1}}在每次迭代时,就像您目前使用String
上的运算符+=
一样。
类似的东西:
String
注意:从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();
}
开始,除非您想要替换第一个字符,如果这样,则从n - 1
开始。
如果您只想删除字符,则应使用{{3}}方法构建目标0
的内容,如下所示:
String
答案 1 :(得分:0)
首先,您无法替换Java String。他们是不可改变的。因此,您必须使用正确的属性创建一个新的String。有很多方法可以做到这一点,其中一种方法是迭代原始字符串并复制字符,除非当前索引是n的倍数。 您还可以将String转换为Array并循环遍历数组的每个第n个元素并更改它们。
答案 2 :(得分:0)
你可以使用模数运算符(%
)来达到你想要的目的:
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();
}