java - 我希望将用户给定字符串的所有小写字母转换为“#”。但是在运行代码时,只有最后一个小写字符被转换
问题描述
我希望将用户给定字符串的所有小写字母转换为“#”。但是在运行代码时,只有最后一个小写字符会被转换。有人可以提出解决方案吗?(我是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()
不关心i
您用于charAt()
. 它只是替换要查找的字符的第一次出现。换句话说:如果你的词是“Aaba”,你总是只用#替换第一个'a'。
换句话说:由于多种原因,您的整个方法都行不通。
有多种方法可以解决这个问题,例如使用replaceAll()
. 该方法还允许使用正则表达式,因此您可以说(一次调用)“用# 替换所有小写字符”。
另一种方法是:
- 创建一个 StringBuilder 某人
- 迭代你的 s1 字符串
- 如果 char 是小写字母:将 # 附加到 sb
- 否则附加字符
- 最后,把 sb 变成一个真正的字符串
推荐阅读
- kubernetes - 如何将 pod 信息作为环境变量公开给 Spring Cloud Dataflow 任务的容器
- citus - 增加 Citus 中的碎片
- heroku - 当我在 heroku 中托管机器人时,为什么 avatar_url discord.py 不起作用?
- reactjs - 为什么我在减速器中使用状态自定义类方法得到意外结果?
- python - 简化暴力破解程序并添加功能
- vb.net - Linq VB.net 到 PowerShell 5.1
- react-native - 与更新本机导航中的参数混淆
- javascript - 变量设置如何与等待一起工作?
- regex - 如何从 dart 中的 RGB 字符串中获取 R、G 和 B 的值?
- flutter - 检查文本是否包含字符串列表中的至少一个字符串 - Dart - Flutter