当前位置: 首页 > 知识库问答 >
问题:

(Java)返回当前字符串的新字符串版本,其中所有>=或

柯昆
2023-03-14

返回当前字符串的新字符串版本,其中所有字母

给定的字母可以是a-z或a-z(包括a-z)。要删除的字母不区分大小写。如果“more”为false,则返回的字符串中所有小于或等于n的字母都将被删除。如果“more”为true,则返回的字符串中所有大于或等于n的字母都将被删除。如果当前字符串为null,则该方法应返回空字符串。如果n不是字母(并且当前字符串不为null),则该方法应返回空字符串。

问题:由于该方法接收char n,如何将循环应用于每个字符?我是否使用arrayOfArg以及使用arrayOfArg[i]存储字母多于字母是否正确?

public String filterLetters(char n, boolean more) {
    char [] arrayOfArg = n.toCharArray();
    String myNewString = "";
    String removedChar = "";
    
    if (n == null) {
        return "";
    }
    
    for (int i = 0; i < Character.length; i++) {
        if (more == false) {
            //all letters less than or equal to n will be removed in the returned string
            if (Character.isLetter(i) == true) continue;
            removedChar = arrayOfArg[i] ++;
            myNewString = arrayOfArg.replace(removedChar,"");
                
        }
        if (more == true) {
            //all letters less than or equal to n will be removed in the returned string
            if (Character.isLetter(i) == true) continue;
            removedChar = arrayOfArg[i] -- ;
            myNewString = arrayOfArg.replace(removedChar,"");
        }
    }
    return myNewString;
        } 

共有2个答案

蓝飞
2023-03-14

使用正则表达式!

public String filterLetters(String str, char n, boolean more) {
    if (str == null || !Character.isLetter(n)) {
        return "";
    }
    String range = more ? n + "-z" : "a-" + n;
    return str.replaceAll("(?i)[" + range + "]", "");
}

其工作原理是创建正则表达式,如下所示:

  • 如果more为真:(? i)[n-z]
  • 如果more为false:(? i)[a-n]

其中“n”是传入的实际字符。

(?i)标志打开大小写不敏感。

[a-n]是从a到n的字符范围(包括)
[n-z]是从nz的字符范围(包括)。

注意:方法中添加了必要的字符串参数。

钦高峯
2023-03-14

这是对您请求的代码的轻微修改,但输出工作正常。我肯定有人比我有更好的主意。这只是一个开始。

public static String filterLetters(String word, String n, boolean more) {
    String[] alphabet = new String[]{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
    int charValue = 0;
    //Find Numerical Value of Char n
    for (int i = 0; i < alphabet.length; i++) {
      if (alphabet[i].equalsIgnoreCase(n)) {
        charValue = i + 1;
      }
    }
    if (more) {
      for (int i = charValue; i < alphabet.length; i++) {
        word = word.replaceAll(alphabet[i],"");
      }
    } else {
      for (int i = charValue; i > 0; i--) {
        word = word.replaceAll(alphabet[i],"");
      }
    }

    
    return word;
  }
 类似资料:
  • GETRANGE key start end 返回key 中字符串值的子字符串,字符串的截取范围由start 和end 两个偏移量决定(包括start 和end 在内)。可以使用负值,字符串右面下标是从-1开始的。 注意返回值处理: 1: start>=length, 则返回空字符串 2: stop>=length,则截取至字符结尾 3: 如果start 所处位置在stop右边, 返回空字符串

  • 我对编码非常陌生,刚刚接触过静态方法,所以我为这些愚蠢的错误提前道歉。在main下调用该方法时,该方法应该显示一个三角形,但我得到的控制台是空的,没有输出。但是,如果我将此写在main下: 然后,三角形将显示在控制台中,但是对于这个赋值,字符串/三角形必须仅通过使用来调用

  • 问题内容: 我已经看到了关于获取所有可能的子字符串(即相邻字符集)的许多问题,但是对于生成所有可能的字符串(包括其子字符串的组合)都没有疑问。 例如,让: 我希望输出是这样的: 要点是,我们可以删除原始字符串中不相邻的多个字符(以及相邻的字符)。 到目前为止,这是我尝试过的: 但是,这只会从原始字符串中删除相邻字符串的集合,而不会返回上例中的元素。 另一个示例是,如果我们使用字符串,则输出列表应包

  • 问题内容: 我正在尝试查找Java字符串中所有出现的子字符串。 例如:在“ ababsdfasdfhelloasdf”中搜索“ asdf”将返回[8,17],因为有2个“ asdf”,一个在位置8,另一个在17。在“ aaaaaa”中搜索“ aa”将返回[0, 1,2,3,4],因为位置0、1、2、3和4处有一个“ aa”。 我尝试了这个: 可以在Python中解决此问题,如下所示: 其中“ wo

  • 我有一个文本包含一些我想要标记的单词,要标记的单词包含在一个列表中。问题是其中一些单词是其他单词的子字符串,但我想从列表中标记最长的可识别字符串。 例如,如果我的文本是“foo和bar不同于foo bar。”我的列表包含“foo”、“bar”和“foo bar”,结果应该是“[tag]foo[/tag]和[tag]bar[/tag]不同于[tag]foo bar[/tag]。”

  • 但是我得到了一个错误,它告诉我必须返回一个字符串。当我查看API时,它告诉我它返回的字符串是另一个字符串的子集...这意味着我返回的是一个字符串,对吗?我被告知这是因为我在循环中返回一个字符串,这不是一回事,但我对这意味着什么有点困惑,因为循环不是在方法中吗?有没有人知道我做错了什么或者我该怎么解决这个问题?