Java获取字符串的第一个字符值

Java获取字符串的第一个字符值,java,string,pattern-matching,Java,String,Pattern Matching,我有类似的输入 AS23456SDE MFD324FR 我需要得到第一个字符的值,比如 多功能显示器 输入的前两个或前三个字符不能更改。需要在数字前获得第一个字符 多谢各位 编辑:这是我尝试过的 public static String getPrefix(String serial) { StringBuilder prefix = new StringBuilder(); for(char c : serial.toCharArray()){

我有类似的输入

AS23456SDE

MFD324FR

我需要得到第一个字符的值,比如

多功能显示器

输入的前两个或前三个字符不能更改。需要在数字前获得第一个字符

多谢各位

编辑:这是我尝试过的

public static String getPrefix(String serial) {
    StringBuilder prefix = new StringBuilder();
        for(char c : serial.toCharArray()){
            if(Character.isDigit(c)){
                break;
            }
            else{
                prefix.append(c);
            }
        }
        return prefix.toString();
}

一个简单的解决方案可以是这样的:

public static void main (String[]args) {

    String str = "MFD324FR";
    char[] characters = str.toCharArray();

    for(char c : characters){
        if(Character.isDigit(c))
            break;
        else
            System.out.print(c);
    }
}

这将在遇到数字(即整数)之前打印第一个“n”字符。

这是一个很好的单行解决方案。它使用正则表达式匹配字符串中的第一个非数字字符,然后用此匹配替换输入字符串

public String getFirstLetters(String input) {
    return new String("A" + input).replaceAll("^([^\\d]+)(.*)$", "$1")
                                  .substring(1);
}

System.out.println(getFirstLetters("AS23456SDE"));
System.out.println(getFirstLetters("1AS123"));
输出:

AS
(empty)

使用以下函数获取所需的输出

public String getFirstChars(String str){
 int zeroAscii = '0'; int nineAscii = '9'; 
 String result = "";
 for (int i=0; i< str.lenght(); i++){
   int ascii = str.toCharArray()[i];
   if(ascii >= zeroAscii && ascii <= nineAscii){
     result = result + str.toCharArray()[i];
   }else{
     return result;
   }
 }
 return str;

}
公共字符串getFirstChars(字符串str){
int zeroscii='0';int nineAscii='9';
字符串结果=”;
对于(int i=0;i如果(ascii>=zeroscii&&ascii,我认为这可以通过一个简单的正则表达式来实现,该正则表达式匹配数字和java的。这种基于正则表达式的方法将比使用更复杂正则表达式的方法更有效

下面的一些方法会起作用

String inp = "ABC345.";
String beginningChars = inp.split("[\\d]+",2)[0];
System.out.println(beginningChars); // only if you want to print.
我使用的正则表达式[\\d]+“
已经为java转义了

它的作用是什么?

它匹配一个或多个数字(d)。
d
匹配unicode中任何语言的数字(因此它也匹配日语和阿拉伯数字)

字符串起始字符=inp.split(“[\\d]+”,2)[0]做什么?

它应用此正则表达式并将字符串分隔为字符串数组,在其中找到匹配项。最后的
[0]
从该数组中选择第一个结果,因为您需要起始字符

我作为2提供的
.split(regex,int)
的第二个参数是什么?

这是限制参数。这意味着正则表达式将应用于字符串,直到找到1个匹配项。一旦找到1个匹配项,字符串将不再处理

从字符串javadoc页面:

limit参数控制应用模式的次数,从而影响结果数组的长度。如果limit n大于零,则模式最多应用n-1次,数组的长度将不大于n,数组的最后一个条目将包含最后一个匹配定界之外的所有输入呃,如果n为非正,则模式将被应用尽可能多的次数,数组可以有任何长度。如果n为零,则模式将被应用尽可能多的次数,数组可以有任何长度,并且尾部的空字符串将被丢弃

这将是有效的,如果你的字符串是巨大的

如果只想在英文数字上拆分,则可能使用其他正则表达式


“[0-9]+”

将字符串转换为char[]并尝试使用Character.isDigit(String.charAt(no.))。是的,我喜欢这个简单的解决方案。我喜欢方法描述它们所做的事情。@user2473015:我用几个案例进行了测试,我可能遗漏了一些东西!你能告诉我这个失败的输入,这样我就可以试一下了。它返回我传递的相同字符串。我用AS123//public static string getPrefix(string serial)进行了尝试{return serial.split(“[\\d]+”,1)[0];}@user2473015:经过编辑和更正,我犯了一个索引错误。适用于1AS123(返回“”)以及123(返回“as”),如果我输入1AS123,它将返回相同的值。@user2473015我更新了我的答案,如果输入以数字开头,它将返回空字符串(即没有字母)。
String inp = "ABC345.";
String beginningChars = inp.split("[\\d]+",2)[0];
System.out.println(beginningChars); // only if you want to print.