Java 获取字符串中第N次出现的字符位置

2019-03-10 12:54|来源: 网络

Java 获取字符串中第N次出现的字符位置的背景:截取字符串的时候,大家应该都是str.substring(start,end)这个方法,这里就有一个开始和结束的字符位置,通过indexOf可以获取到。如果像“aaaa#bbbb#cccc”这种,你要从第二个#号开始截取,用indexOf这种方式来弄就不太灵活了


下面有一个方法,是用Java 获取字符串中第N次出现的字符位置的方法,直接来源码:

public int getCharacterPosition(String string){
    //这里是获取"#"符号的位置
    Matcher slashMatcher = Pattern.compile("#").matcher(string);
    int mIdx = 0;
    while(slashMatcher.find()) {
       mIdx++;
       //当"#"符号第二次出现的位置
       if(mIdx == 2){
          break;
       }
    }
    return slashMatcher.start();
}


本文链接:Java 获取字符串中第N次出现的字符位置,转载请注明出处

相关问答

更多
  • 你可以使用values()方法: 例如Status.values()[0]将在您的情况下返回PAUSE,如果打印,将会调用toString()并打印“PAUSE”。 if status is of type Status enum, status.name() will give you its defined name.
  • String test = "This is a sentence"; String lastWord = test.substring(test.lastIndexOf(" ")+1); String test = "This is a sentence"; String lastWord = test.substring(test.lastIndexOf(" ")+1);
  • 这是一个整洁的解决方案: String upToNCharacters = s.substring(0, Math.min(s.length(), n)); 意见:虽然这个解决方案是“整洁”的,但我认为它实际上比一个以明显的方式使用if / else的解决方案更不可读 。 如果读者没有看到这个伎俩,他/她必须更加努力地理解代码。 IMO,代码的含义在if / else版本中更为明显。 Here's a neat solution: String upToNCharacters = s.substring( ...
  • 您要查找的方法是charAt 。 这里有一个例子: String text = "foo"; char a_char = text.charAt(0); System.out.println( a_char ); // Prints f 有关更多信息,请参阅String.charAt上的Java文档 。 如果你想要另一个简单的教程, 这一个或这个 。 如果不希望将结果作为char数据类型,而是将其作为字符串,则可以使用Character.toString方法: String text = "foo"; S ...
  • 好吧,你还没有告诉我们错误是什么,所以我只是给一些示例扫描器代码,让你处理: //create the Scanner Scanner terminalInput = new Scanner(System.in); //read input String s = terminalInput.nextLine(); 这应该工作; 扫描仪是最简单的类之一。 也许你不小心使用了 new Scanner(); //no input source! 而不是 new Scanner(System.in); //l ...
  • 使用3个空格split字符串以获取标记数组 拿你感兴趣的令牌(这里它将被索引为[2] ) split your string using 3 spaces to get array of tokens take token which interests you (here it will be indexed as [2])
  • 例如,对于一个字符串,它返回:X = 0,Y = -11,width = 20,length = 17。 x和y是什么意思? 使用大多数Graphics方法,您可以指定绘图的顶部/左侧位置。 例如 g.drawImage(image, 0, 0, null); 但是,在绘制文本时,请指定绘图的底部/左侧位置。 所以在你的情况下你会使用: g.drawString("string", 0, 11); 一般来说,我猜你会在drawString()方法中使用Y值的绝对值。 for example, for o ...
  • 在可能的情况下,可以使用java.text.Normalizer类将文本转换为普通的拉丁字符,后跟变音符号(重音符号)。 因此,例如,单字符字符串"é"将变成两个字符串['e', {COMBINING ACUTE ACCENT}] 。 完成此操作后,您的字符串将是不重叠的字符,重音符号和您提到的其他特殊字符的组合。 在这一点上,你可以只使用白名单来过滤字符串中的字符,以保留你想要的东西(这可能像一个正则表达式的[A-Za-z0-9]一样简单,这取决于你在做什么)。 一种方法可能如下所示: String na ...
  • 只需使用GC#textExtent()方法获取具有文本高度和宽度的Point : public static void main(String[] args) { final Display display = Display.getDefault(); final Shell shell = new Shell(display); shell.setLayout(new GridLayout(1, false)); GC gc = new GC(display); ...
  • 它应该像这样工作: "(?:\\.|[^"])+" 没有前瞻/后面的东西。 这样做如下: 寻找一个" ,消耗它 检查接下来的2个字符是否是反斜杠后跟任何字符(这将匹配两个反斜杠\\ ,其中第一个屏蔽第二个字符,以及\" )。如果找不到,请转到步骤3。发现,消耗这2个字符并重复步骤2。 检查下一个字符是否不是" 。如果是,请消费并转到步骤2.如果不是(它是" ),请转到步骤4 消费"必须在这里 正如HamZa指出的那样,如果在字符串之外找到"并且不打算成为字符串的开头" ,则此正则表达式将失败。例如对于Ja ...