gpt4 book ai didi

java - 我希望将用户给定字符串的所有小写字母转换为 '#' 。但是在运行代码时,只有最后一个小写字符被转换

转载 作者:行者123 更新时间:2023-11-29 07:24:51 25 4
gpt4 key购买 nike

我希望将用户给定字符串的所有小写字母转换为“#”。但是在运行代码时,只有最后一个小写字符被转换。有人可以建议解决这个问题吗? (我是java新手)

import java.util.Scanner;

class replaceEx{
public static void main(String args[])
{
Scanner s=new Scanner(System.in);
String s1,s2=null;
s1=s.nextLine();
for(int i=0;i<s1.length();i++)
{
if(s1.charAt(i)>='a' && s1.charAt(i)<='z')
s2=s1.replace(s1.charAt(i),'#');
}
System.out.println(s2);
}
}

输入:ABCDabcd

输出:ABCDabc#

最佳答案

这里:

s2=s1.replace(s1.charAt(i),'#');

发生的情况是:s2 变为 s1,其中 i 处的字符被替换为“#”。

您假设 s2 以某种方式记住了以前 的分配。它没有。

换句话说:您的代码会调用:

s2=s1.replace('a','#');
s2=s1.replace('b','#');
s2=s1.replace('c','#');
s2=s1.replace('d','#');

因此,s2 被分配了 ABCD#bcd、ABCDa#cd、ABCDab#d、ABCDabc#。如前所述:只有最后一项任务有效。更糟的是:replace() 不关心您用于 charAt() 的索引 i。它只是替换了要查找的第一次出现的字符。换句话说:如果您的单词是“Aaba”,您总是只用#替换第一个“a”。

换句话说:由于多种原因,您的整个方法都行不通。

有多种方法可以解决这个问题,例如使用 replaceAll() .该方法允许使用正则表达式,因此您可以(在一次调用中)轻松地说“用# 替换所有小写字符”。

另一种方法是:

  • 创建一个 StringBuilder sb
  • 迭代你的 s1 字符串
  • 如果 char 是小写字母:将 # 附加到 sb
  • 否则追加字符
  • 最后把sb变成一个真正的字符串

关于java - 我希望将用户给定字符串的所有小写字母转换为 '#' 。但是在运行代码时,只有最后一个小写字符被转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55277297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com