需要帮助将从Java字符串中删除标点符号的代码转换为递归吗

需要帮助将从Java字符串中删除标点符号的代码转换为递归吗,java,string,Java,String,我想出了一个在Java中删除字符串标点符号的解决方案。需要将其转换为递归方法。如果有人能帮我解决这个问题,我将不胜感激 代码如下: public class punctuationRemove { //private static String punc = "[][(){},.;!?<>%]"; static StringBuilder sb = new StringBuilder(); static char[] punc = "',.;!?(){}[]<>%"

我想出了一个在Java中删除字符串标点符号的解决方案。需要将其转换为递归方法。如果有人能帮我解决这个问题,我将不胜感激

代码如下:

public class punctuationRemove {

//private static String punc = "[][(){},.;!?<>%]";
 static StringBuilder sb = new StringBuilder();
 static char[] punc = "',.;!?(){}[]<>%".toCharArray();

 public static void main(String[] args){
        String s = "Hello!, how are you?";
        System.out.println(removePuntuation(s));
    }

 public static String removePuntuation(String s)
 {
     String tmp;
     boolean fl=true;

     for(int i=0;i<s.length()-1;i++)
     {
         fl=true;
         char strChar=s.charAt(i);
         for (char badChar : punc) 
         {
            if (badChar == strChar)
            {
               fl=false;
               break;
             }
          }

          if(fl)
          {
             sb.append(strChar);
           }
     }
     return sb.toString();
 }
}
公共类标点删除{
//私有静态字符串punc=“[[(){},.;!?%]”;
静态StringBuilder sb=新StringBuilder();
静态字符[]punc=“”,.;!?(){}[]%”。tocharray();
公共静态void main(字符串[]args){
String s=“你好,你好吗?”;
System.out.println(移除Puntuation);
}
公共静态字符串removePuntuation(字符串s)
{
串tmp;
布尔fl=真;

对于(int i=0;i递归通常有两部分:

  • 一种基本情况,其中所有递归停止并返回结果,以及
  • 一种迭代步骤,其中递归继续进行
如何递归地检查字符串的每个字符?他们只查看第一个字符,并将从1到其结尾的子字符串发送到递归调用

例如:

public String splitRecursive(String s) {
    if(!s.isEmpty()) {
        return s.charAt(0) + splitRecursive(s.substring(1));
    } else {
        return "";
    }
}
让我们考虑一下,只要字符串不是空的(即基本大小写),那么我应该获取我得到的第一个字符并将其附加到另一个调用的结果中(即迭代步骤),该调用将子字符串从1增加到剩余的字符数。如果它是空的,我只返回空字符串

这段基本代码实际上是解决问题所需代码的3/4。您需要对其进行扩充,以插入字符,查看它是否是您已经隔离的标点符号之一


考虑一下你的迭代步骤:如果你看到标点符号,你应该怎么做?如果你没有看到标点符号,你应该怎么做?我把剩下的作为练习留给读者。

我想这会对你有所帮助

public class RemovePunctuations {

public static int i = 0;
public static void main(String[] args){
        String s = "Hello!, how are you?";
        System.out.println(removePuntuation(s));
    }
使用递归

public static String removePuntuation(String s){
    char [] charArray = s.toCharArray();
            if(!Character.isLetter(charArray[i]) && !Character.isSpaceChar(charArray[i])){
                s = s.replace(String.valueOf(charArray[i]), "");
                i--;
            }
            i++;
            if(i<s.length())
                return removePuntuation(s);
        return s;
}

}
publicstaticstringremovepuntuation(字符串s){
char[]charArray=s.toCharArray();
if(!Character.isleter(charArray[i])&&!Character.isSpaceChar(charArray[i])){
s=s.replace(String.valueOf(charArray[i]),“”);
我--;
}
i++;

if(我“需要将其转换为递归方法”-人们
需要
转换为递归方法的唯一原因(我已经看到)因为这是他们的家庭作业要求他们做的…@John3136:这是否是一个家庭作业练习不在这里也不在那里。@Makoto这是当提问的人没有表现出任何努力,似乎试图掩盖这是家庭作业的事实时。没有必要使用递归。.简单的replaceAll()用适当的正则表达式就可以了一行…@John3136:我怀疑他们是否隐瞒了这个事实,首先。其次,他们可能会被困在最佳算法或方法上。仅仅因为这是一个家庭作业并不意味着它应该立即关闭。尽管我想现在这是一个切线。
public static String removePuntuation(String s){
     char [] charArray = s.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            if(!Character.isLetter(charArray[i]) && !Character.isSpaceChar(charArray[i])){
                s = s.replace(String.valueOf(charArray[i]), "");
            }
        }
        return s;
}