查找字符串

时间:2018-04-09 08:19:05

标签: java letter

我的程序使用的ID系统在字母前需要1-3位数字,然后在字符后面需要1-3位数字。例如:12a1231b83

我想知道的是如何在字符串中找到第一个字母,这样我就可以存储字母,因为它用于稍后的数字之间的操作。

谢谢:)

5 个答案:

答案 0 :(得分:3)

只需遍历字符并抓住上/下框A-Z范围内的第一个字符。

public char getCharacter(final String code)
{
    for (char character : code.toCharArray())
    {
        if (   (character >= 'a' && character <= 'z')
            || (character >= 'A' && character <= 'Z'))
        {
            return character;
        }
    }
    throw new RuntimeException("No character in ID: " + code);
}

答案 1 :(得分:2)

您可以使用正则表达式执行此任务,例如:

System.out.println("12a123".replaceAll("\\d{1,3}([A-z])\\d{1,3}", "$1"));

<强>故障:

  • \d{1,3}匹配一个数字(等于[0-9]
  • {1,3}量词 - 匹配1至3次,尽可能多次,根据需要回馈(贪婪)
  • 第一捕获组([A-z]
    • 匹配以下列表中的单个字符[A-z] A-z A(索引65)和z(索引122)(区分大小写)
    • 之间的单个字符

答案 2 :(得分:2)

我可以建议两种解决方案:

Soution 1

如果您使用的是Java 8,则可以使用:

String str = "12a123";
String firstCharacter  = str.replaceAll("\\d{1,3}([A-z])\\d{1,3}", "$1");//a

Soution 2

你可以像这样使用replaceAll:

{{1}}

答案 3 :(得分:1)

使用Java的Character类的isLetter方法。

看起来像;

public class CharacterTest {

    private static Character getFirstCharInString(final String candid)
    {
        int found = 0;

        char [] candids = candid.toCharArray();

        for(found = 0; found < candids.length; found++)
        {
            if(Character.isLetter(candids[found])) break;
        }

        return new Character(candids[found]);
    }

    public static void main(String[] args) {

        String ids = "12a123";
        String ids2 = "1b83";

        System.out.println(getFirstCharInString(ids));
        System.out.println(getFirstCharInString(ids2));
    }
}

答案 4 :(得分:1)

这个与Aniket类似。

public class ExampleCode 
{
    public static void main(String[] args) 
    {
        String[] input = { "12a234", "1s324" };
        String[] operations = new String[input.length];

        for (int i=0; i < input.length; i++) 
        {
            operations[i] = token.replaceAll("\\d{1,3}([A-z])\\d{1,3}", "$1"));
        }
    }
}