在Java中对单个字符进行子串化

Posted

技术标签:

【中文标题】在Java中对单个字符进行子串化【英文标题】:Substringing single characters in Java 【发布时间】:2016-07-29 03:18:26 【问题描述】:

我正在尝试在 Java 中创建一个方法,该方法将识别一行文本中的非字母数字符号并将其删除。但是,我可以使用的工具有限。我必须使用循环和扫描仪来阅读文本,并且只能使用 charAt 和 substring 方法来删​​除有问题的字符。这是我想出的代码

public String sanitize2()
        Scanner sanitizer = new Scanner(input.getText());
        String toBeSanitized = sanitizer.nextLine();
        int length = toBeSanitized.length();
        for (int i=0;i < toBeSanitized.length(); i++)
            if ((toBeSanitized.charAt(i) >= 'a' && toBeSanitized.charAt(i) <= 'z') ||
                (toBeSanitized.charAt(i) >= 'A' && toBeSanitized.charAt(i) <= 'Z') ||
                (toBeSanitized.charAt(i) >= '0' && toBeSanitized.charAt(i) <= '9')) 
            
                   toBeSanitized = toBeSanitized.substring(0,i) + toBeSanitized.substring(i+1);
            
        
        input.setText(toBeSanitized);
        return toBeSanitized;
    

但是,当我将文本插入输入字段时,它完全给出了错误的答案。谁能解释我在这里做错了什么?

【问题讨论】:

查看这篇文章。它是重复的。 ***.com/questions/1805518/… @kimdung 不是您链接问题的副本。那个是关于正则表达式的,这个不是。这个是关于单字符 Unicode 数字的。 我也看过这个,但我认为这对我的情况没有帮助,因为我受限于我可以使用的方法 您正在删除字母数字范围内的字符 您的代码看起来只是试图删除字母数字字符,而不是保留它们。此外,使用while 循环而不是for,并且仅在找到有效字符时增加i。你目前总是递增长 i 所以你会跳过一些坏字符 【参考方案1】:

如果您不需要使用所有给定的工具,那么我认为这可能有助于解决您的问题。

    String toBeSanitized = "(*this*)* text is ^0nly for t3st!ng!";
    String sanitizedStr = "";
    int length = toBeSanitized.length();
    for (int i=0;i < toBeSanitized.length(); i++)
        if ((toBeSanitized.charAt(i) >= 'a' && toBeSanitized.charAt(i) <= 'z') ||
        (toBeSanitized.charAt(i) >= 'A' && toBeSanitized.charAt(i) <= 'Z') ||
        (toBeSanitized.charAt(i) >= '0' && toBeSanitized.charAt(i) <= '9') || 
        toBeSanitized.charAt(i) == ' ') // optional
        
            sanitizedStr += toBeSanitized.charAt(i);
        
    

    System.out.println(sanitizedStr);

我还包括了空格,但如果您愿意,可以将其删除。 希望对您有所帮助。

【讨论】:

谢谢,这似乎运作良好。如果我没看错,它不会删除不需要的字符,而是创建一个仅包含已接受字符的新字符串? 是的,你是对的。如果您不想要它们,请跳过它们。

以上是关于在Java中对单个字符进行子串化的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中对单个字符串进行排序

[LintCode] 最小子串覆盖 Java

求字符串不同子串个数

.NET与Java的子串运算性能比较

华为OD机试真题Java实现最长连续子串真题+解题思路+代码(2022&2023)

使用后缀树进行近似子串匹配