特殊字符未删除

时间:2019-09-26 23:04:38

标签: java string loops

因此,我遇到了一个问题,即我的代码无法删除空格以外的特殊字符。我尝试了跟踪索引,甚至添加索引,它仍然无法正常工作。我已经尝试了输入“ BANANA&PEEL”,但无法正常工作。

        String strMessage = input.nextLine();

        String strChars = " !@#$%^&&*() ";

        for(int i = 0; i < strMessage.length() - 1; i++)
            for(int j = 0; j < strChars.length(); j++) {
                if(strChars.charAt(j) == strMessage.charAt(i)) {
                    strMessage = strMessage.substring(0, strMessage.indexOf(strMessage.charAt(i))) + strMessage.substring(strMessage.indexOf(strMessage.charAt(i+1)));
                    break;
                }
            }

        System.out.println(strMessage);

所以我的输出应该是BANANAPEEL

5 个答案:

答案 0 :(得分:1)

我认为这样可以很好地工作:

            Scanner input = new Scanner(System.in);
            String strMessage = input.nextLine();
            String strChars = " !@#$%^&&*()";
            String temp = "";
            boolean isInStrChars = false;

            for (int i = 0; i < strMessage.length(); i++){
                isInStrChars = false;
                for (int j = 0; j < strChars.length(); j++) {
                    if (strChars.charAt(j) == strMessage.charAt(i)) {
                        isInStrChars = true;
                    }
                }
                if(!isInStrChars){
                    temp+=strMessage.charAt(i);
                }
            }
            System.out.println(temp);

我刚刚创建了一个'temp'-String ,并且只有当原始字符串中的字符不在 String strChars 中时,该字符才会添加到“ temp'-String。

编辑:当然,您可以在最后将temp-String设置为原始strMessage:

strMessage = temp;

答案 1 :(得分:0)

您可以使用String Tokenizer类来分隔字符串。

StringTokenizer t = new StringTokenizer(strMessage," !@#$%^&&*()");
while(t.hasMoreElements()){
System.out.print(t.nextToken()+""); }

假设strMessage =“ hello $#&worl#d”;

输出为helloworld

答案 2 :(得分:0)

使用StringTokenizer ----

 StringTokenizer st1 =
             new StringTokenizer("hello$#& w orl#d", " !@#$%^&&*()");
        while (st1.hasMoreTokens())
            System.out.print(st1.nextToken());

输出-helloworld

答案 3 :(得分:0)

您可以简单地使用String类的replaceAll(String regex, String replacement)

类似以下内容

public static void main(String[] args) {
    String source = "hel!lo$#& w orl#d";
    String replacementChar = " |!|@|#|\\$|%|^|&|(|)|\\*"; //Add you char separated by OR( |) 

    String s = source.replaceAll(replacementChar, "");

    System.out.println(s);

}

输出:

helloworld

编辑:

如评论中所述,您不想使用RegEx,而只想保留字母,可以使用Character.isAlphabetic

来解决。
 public static void main(String[] args) throws IOException {
        String strMessage = "BANANA & PEEL";

        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < strMessage.length(); i++) {

            if (Character.isAlphabetic(strMessage.charAt(i))) {
                builder.append(strMessage.charAt(i));
            }
        }
        String finalString = builder.toString();

        System.out.println(finalString);

    }

答案 4 :(得分:0)

使用lambda函数,该函数删除所有作为字符串传递的字符

String strMessage = "BANANA & PEEL";
String strChars = " !@#$%^&&*()";

deleteChars.apply( strMessage, strChars );  // BANANAPEEL

find deleteChars here