永发信息网

java中应用replaceAll的时候如何跳过空格?

答案:1  悬赏:80  手机版
解决时间 2021-08-11 06:50
  • 提问者网友:沉默的哀伤
  • 2021-08-10 14:34

我想写一个java程序,目的是删除一个输入的句子中的所有元音字母(aeiou),我写了以下的代码:

Scanner input=new Scanner(System.in);

str = input.next();

newstr=str.replaceAll("[aeiou]","");

System.out.println(newstr);

但是总是被空格键挡住,举个例子,输入“java is funny”,然后得出的结果是“jv”,但是我预期的效果应该是“jv s fnny”,保留住空格,而且还要继续删除空格键后面出现的元音字母,那我应该要怎么改代码?

还有个问题,当前后出现一样的字母时,只保留单个字母,举个例子,输入“nn”,得出结果“n”,我试了以下代码:

if(str.charAt(i)==str.charAt(i+1)){
 newstr=str.repalce(str.charAt(i),"");}

但是不能运行,不知道问题出在哪,应该用什么方法?

请大家帮忙~

最佳答案
  • 五星知识达人网友:迟山
  • 2021-08-10 15:37

第一个问题我做了测试 并不会被空格挡住


第二个问题在于你没有理解String是不可变的


调用任何String的方法并不会改变String的字符串内容(除了=运算符)


因此不管循环几次 str 还是原来的 str


所有的替换都是在同一个str的基础上进行的


因此每次得到的newstr都是毫不相干的对象


而replace方法会替换所有的相同的char而不是替换一个


方法签名是String replace(char,char) 你连调用都错了


具体的做法是


str = "aabcdnnnn";
  newstr ="";
  int i = 0;
  for (; i < str.length()-1; i++) { 
   if(str.charAt(i)!=str.charAt(i+1))
    newstr+=str.charAt(i);
  }
  newstr+=str.charAt(i);
  System.out.println(newstr);

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯