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

查找字符串中最后一个非数字字符的索引

宗政楚
2023-03-14
String foo = "987abc<*(123";

我对RegEx-es和类似的搜索模式非常缺乏经验,而且我所尝试的每一种方法都不能正常工作(大多数情况下会导致StringIndexOutOfBoundsException)。

找到字符串中最后一组数字开始的索引的可靠而简单的方法是什么?

共有1个答案

曹涵润
2023-03-14

注意:“1”在字符串的索引8处。

如果您不想要它,就没有必要为此使用RegEx。

像这样的方法应该完成以下工作:

public static int findLastNumbersIndex(String s) {
  boolean numberFound = false;
  boolean charBeforeNumberFound = false;

  //start at the end of the String
  int index = s.length() - 1;

  //loop from the back to the front while there are more chars 
  //and no nonDigit is found before a digit
  while (index >= 0 && !charBeforeNumberFound) {
    //when the first number was found, set the boolean flag
    if (!numberFound && Character.isDigit(s.charAt(index))) {
      numberFound = true;
    }

    //when already a number was found and there is any nonDigit stop the execution
    if (numberFound && !Character.isDigit(s.charAt(index))) {
      charBeforeNumberFound = true;
      break;
    }

    index--;
  }
   
  return index + 1;
}

public static void main(String[] args) {
  System.out.println("\"987abc<*123\"" + " index of lastNumberSet: " + findLastNumbersIndex("987abc<*123"));
  System.out.println("\"987abc<*123abc\"" + " index of lastNumberSet: " + findLastNumbersIndex("987abc<*123abc"));
  System.out.println("\"987abc\"" + " index of lastNumberSet: " + findLastNumbersIndex("987abc"));
  System.out.println("\"abc987\"" + " index of lastNumberSet: " + findLastNumbersIndex("abc987"));
  System.out.println("\"987\"" + " index of lastNumberSet: " + findLastNumbersIndex("987"));
  System.out.println("(Empty String)" + " index of lastNumberSet: " + findLastNumbersIndex(""));
  System.out.println("\"abc\"" + " index of lastNumberSet: " + findLastNumbersIndex("abc"));
}
"987abc<*123" index of lastNumberSet: 8
"987abc<*123abc" index of lastNumberSet: 8
"987abc" index of lastNumberSet: 0
"abc987" index of lastNumberSet: 3
"987" index of lastNumberSet: 0
(Empty String) index of lastNumberSet: 0
"abc" index of lastNumberSet: 0
 类似资料:
  • 问题内容: 我想在给定的输入string中找到某个子字符串最后一次出现的位置(或索引)。 例如,假设输入字符串为,子字符串为,则应输出3。 我怎样才能做到这一点? 问题答案: 用途: 另外,请勿将其用作变量名,否则将使内置的阴影变暗。

  • 我如何在O(N**2)个时间内完成它?

  • 问题是,我试图这么做,但我检查字符串长度的方法不起作用;我能做些什么来修复它?

  • 查找字符串中出现最多的字符和个数? 如 sdsdsddssssssdd -> 字符最多的是s,出现9次 思路说明 利用python中的collections模块的Counter,查此函数详细内容.对字符串进行统计。 然后将结果转化为字典类型。 特别注意,在字符串中可能会出现数量并列第一的字符,因此要通过循环找出最大数之后,再通过循环找出最大数对应的字母(键)。 解答1(python) import

  • 本文向大家介绍在JavaScript中查找字符串的第一个非重复字符,包括了在JavaScript中查找字符串的第一个非重复字符的使用技巧和注意事项,需要的朋友参考一下 我们需要编写一个JavaScript函数,该函数将字符串作为第一个也是唯一的参数。 该函数应该找到并返回它在字符串中遇到的第一个字符的索引,该字符串在字符串中仅出现一次。 如果字符串不包含任何唯一字符,则函数应返回-1。 例如- 如

  • 问题内容: 在 java 中查找字符串中的第一个非重复字符? 问题答案: 有多种方法可以找到它。 他们之中有一些是: 使用LinkedHashMap 使用 indexOf 和 lastIndexOf 方法。 面试问题之一是“你将如何在 String 中找到第一个非重复字符。” 例如: 如果输入字符串是“analogy”,那么程序应该返回’n’ 如果输入字符串是“easyest”,那么程序应该返回’