如果给一个字符串,比如“去医学院!”例如,如何仅替换偶数字符?问题是,虽然我的代码处理第一个单词,但单词之间的空格本身算作一个字符,并将第二个单词中的替换搞乱,第二个单词的第一个字母被归类为偶数。
这是我的尝试
public static void main(String[] args) {
String s = "go to med!";
String alphabetS = "abcdefghijklmnopqrstuvwxyz";
StringBuilder sb = new StringBuilder(s);
for(int i=0; i<s.length(); i++){
char currChar = s.charAt(i);
int idx = alphabetS.indexOf(currChar);
if (idx != -1)
if (i%2==1)
{
sb.setCharAt(i, '*');
}
}
System.out.println(sb);
}
这将给出输出“gomd!”(第二个字母正确替换为表示偶数,但第二个单词的第一个字母不应替换为“第一个”不是“偶数”。如何使索引忽略空格?
答案最好不包含数组,只包含Char和String方法。
有一千种不同的方法来实现你的目标,但是假设你想继续使用你的解决方案,下面是你可以做的
public static void main(String[] args) {
String s = "go to med!! goodbye cruel world";
String alphabetS = "abcdefghijklmnopqrstuvwxyz";
StringBuilder sb = new StringBuilder(s);
for (int i = 0,relativePosition=0; i < s.length(); i++,relativePosition++) {
char currChar = s.charAt(i);
if(currChar == ' '){relativePosition=-1;continue;}
int idx = alphabetS.indexOf(currChar);
if (idx != -1)
if (relativePosition % 2 == 1)
sb.setCharAt(i, '*');
}
System.out.println(sb);
}
印的
g* t* m*d!! g*o*b*e c*u*l w*r*d
这将给出:g*t*m*d*
public static void main(String[] args) {
String s = "go to med!";
int realindex=0;
StringBuilder sb = new StringBuilder();
for(int i=0; i<s.length(); i++){
char currChar = s.charAt(i);
if ((currChar != ' '))
{
if (realindex%2==1) {
currChar = '*';
}
realindex++;
}
sb.append(currChar);
}
System.out.println(sb.toString());
}
您可以简单地分割空间上的输入并单独处理每个工作。然后可以使用StringJoiner
将结果拼凑在一起,例如。。。
String s = "go to med!!";
String alphabetS = "abcdefghijklmnopqrstuvwxyz";
String[] words = s.split(" ");
StringJoiner sj = new StringJoiner(" ");
for (String word : words) {
StringBuilder sb = new StringBuilder(word);
for (int i = 0; i < sb.length(); i++) {
char currChar = sb.charAt(i);
int idx = alphabetS.indexOf(currChar);
if (idx != -1) {
if (i % 2 == 1) {
sb.setCharAt(i, '*');
}
}
}
sj.add(sb.toString());
}
System.out.println(sj.toString());
哪些输出
g* t* m*d!!
这是否可以不使用数组而只使用char和string方法来实现?
与依赖于i
不同,您需要一个单独的计数器,例如,它跟踪指向的字符,并可用于忽略无效字符
String s = "go to med!!";
String alphabetS = "abcdefghijklmnopqrstuvwxyz";
StringBuilder sb = new StringBuilder(s);
int counter = 0;
for (int i = 0; i < sb.length(); i++) {
char currChar = sb.charAt(i);
int idx = alphabetS.indexOf(currChar);
if (idx != -1) {
if (counter % 2 == 1) {
System.out.println("!!");
sb.setCharAt(i, '*');
}
counter++;
}
}
System.out.println(sb.toString());
哪些仍然输出
g* t* m*d!!
问题内容: 如何在Java中用空字符串替换单引号’。我尝试了以下操作,但似乎没有用。 提前致谢。非常感谢您的帮助。(输出应为:Sids den) 谢谢你们的回应。我想我应该对我的问题更加清楚。基本上,我从表中获得特殊字符,并且从同一个表中我们必须用什么值替换那些特殊字符。这是代码片段: 因此,当数据中的evrf有特殊字符’时,我将面临nullpointer异常。请建议如何进行此操作? 问题答案:
问题内容: 我有一个包含多个空格的字符串。我想用加号代替它们。我以为我可以用 但它只会替换第一次出现的情况。如何获得它来代替所有出现的情况? 问题答案: 这是不需要正则表达式的替代方法:
js如何替换字符串中的中文空格? 我尝试使用了下面几个方法都不行 str.replace(/[\u3000]/g, ' ')
我正在从DB获取空值,但我需要显示空字符串。 例如,我必须附加四个值以显示在Excel工作表的单个单元格中,如下所示: 如何在Java中达到预期的结果(替换)?
问题内容: 我正在用SQL创建一个临时过程,因为我有一个用markdown编写的表的值,因此该表在Web浏览器中显示为HTML (markdown到HTML转换) 。 该列的字符串当前如下所示: 我目前正在使用粗体和斜体文本。这意味着 (以粗体显示的情况下), 我需要更换奇N次的格局与乃至倍。 我看到了replace(),但是它在字符串的所有模式上执行替换。 那么,如何仅当它是奇数或偶数时才替换子
问题内容: 我有一个字符串叫做 我想用 我的输出替换DOT 我尝试了这段代码: 我正在获取StringIndexOutOfBoundsException。 如何更换圆点? 问题答案: 在点之前需要两个反斜杠,一个反斜杠可以使斜杠通过,而另一个反斜杠可以使点变为文字。正斜杠和星号视为原义。 http://docs.oracle.com/javase/7/docs/api/java/lang/Stri