查找条目中的具体位置

时间:2015-10-04 02:10:17

标签: java regex

你好我是非常新的java和我目前正在使用java介绍编程类。我无法找到角色的具体位置。该条目假设为所有数字,如果有一个字母,则假设该字母位于该字母的位置。我也不能使用循环来完成这项任务。这是迄今为止我得到的最好结果,但只有当条目有x时才有效。如何才能显示字母表中任何字母的位置?我很抱歉,如果我听起来很愚蠢,但我非常非常新的java。提前谢谢。

String alphabet = "x";
if (!isbn.matches("[0-9]+")) {
        System.out.println("You need to enter a numeric digit at position " + isbn.indexOf(alphabet));

2 个答案:

答案 0 :(得分:1)

翻转正则表达式以搜索无效字符:

String isbn = "978-3-16-148410-0";
Matcher m = Pattern.compile("[^0-9]").matcher(isbn);
if (m.find())
    System.out.println("You need to enter a numeric digit at position " + m.start());

输出

You need to enter a numeric digit at position 3

改进版画

System.out.printf("You need to enter a numeric digit at position %d%n  %s%n%" + (m.start() + 3) + "s%n", m.start(), isbn, "^");

输出

You need to enter a numeric digit at position 3
  978-3-16-148410-0
     ^

答案 1 :(得分:0)

有几种方法可以解决这个问题,我并不保证这是最好的,但你在这里是解决方案的大纲。我将实施作为练习,所以我不做你的功课; - )

首先,提出一个正则表达式来贪婪地匹配数字(就像你已经拥有的那样)并使用Java的Pattern类进行编译。

然后,使用Matcher及其replaceFirst方法将匹配的模式替换为空字符串。结果将是一个以第一个非数字字符开头并一直到输入字符串结尾的字符串。

然后,您可以通过查看"不匹配的尾部"来查看输入是否有效。是空的。

最后,如果输入无效,请使用带有输入字符串的索引和这个"不匹配的尾部"告诉用户第一个坏人物在哪里。

这里有一些"左边作为练习"的轮廓。每个"锻炼"是一个单行。您应该能够在PatternMatcherString的链接文档中找到所需的一切。

public static void main(String[] args){
    String myStr = "0123f5";
    //Excercise: compile a greedy number matching regex

    //Excercise: get an instance of a matcher for this regex and the input string

    //replace the first match in input string to greedy 
    //number-pattern with empty string 
    String mismatchedTail = m.replaceFirst("");
    if(!mismatchedTail.equals("")){         
        System.out.println("Must enter numeric value at index: "/*Excercise: use index of, the mismatch tail, and input to get the first invalid index*/));
    } else {
        System.out.println("Good 2 go");
    }
}

当我用填充的空零件运行它时的结果:

Must enter numeric value at index: 4