删除字符串中的数字之后的任

时间:2017-02-23 04:30:21

标签: java string

如何删除android中的数字后面的字符

假设我的字符串是

A1SS
A2SS
2SS
3SS
5SS

我的输出应该是

A1
A2
2
3
5

7 个答案:

答案 0 :(得分:1)

使用for来执行此操作。

更新案例AA22SAA22。谢谢@ meo_3_the。

例如:

    String s = "A1SS";
    StringBuilder newStr = new StringBuilder("");
    boolean detected = false;
    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) >= '0' && s.charAt(i) <= '9'){
            newStr.append(s.charAt(i));
            detected = true;
        }else{
            if (!detected)
                newStr.append(s.charAt(i));
            else
                break;
        }
    }

结果字符串:newStr.toString();

答案 1 :(得分:1)

简单的方法:

         String input="mhd60oug",result;
         int LastDigitid = -1;
       for(int i=0; i < input.length(); i++){
           char c = input.charAt(i);
           if(Character.isDigit(c)){
               LastDigitid = i;
           }
       }
       if(LastDigitid != -1){
          result = input.substring(0,LastDigitid+1);
       }
       else{
           result = input;
       }
       System.out.println(result);

更新

这种方式只能在字符串中的最后一个数字后起作用。提问者并没有解释他在问题中究竟想要哪种情况。

有几个主要案例:

  
      
  1. String有多个号码,例如A1SS23BD
  2.   

在这种情况下,您想要的结果是A1还是A1SS23

  1. String只有一个号码,例如2SS
  2. String不包含ASS
  3. 等任何数字
  4. String只有23
  5. 之类的数字

答案 2 :(得分:0)

简单方法:比其他方式更快

public String getData(String val){
        String dat =val;
        boolean intFound=false;
        for (int i=0; i < val.length(); i++) {
            char c = val.charAt(i);
            if (Character.isDigit(c)) {
                dat = val.substring(0, i + 1);
                intFound = true;
            } else if (intFound) {
                break;
            }
        }
        return dat;
    }

使用上述方法和

String data=getData("A1SS");

<强>简单

它将适用于所有情况

  • "A434AS"退回"A434"

  • "3FG"退回"3"

  • "ERT45"退回"ERT45"

  • "SDF34DFG2"退回"SDF34"感谢Ole V.V

  

<强>逻辑:

     
      
  1. 将字符串传递给方法。
  2.   
  3. 检测String
  4. 中的整数位置   
  5. 忽略整数
  6. 之后的另一个字符   
  7. substring返回到该位置
  8.   

感谢Rabbit先生

答案 3 :(得分:0)

您可以使用以下方法,该方法适用于所有情况。

    public String getModifiedString(String string) {
        String modifiedString = "";

        for(int index = 0; index < string.length(); index++) {
            char currentChar = string.charAt(index);
            if(Character.isLetter(currentChar)) {
                modifiedString += currentChar;
            } else if(Character.isDigit(currentChar)) {
                modifiedString += currentChar;

                for(int digitIndex = index+1; digitIndex < string.length(); digitIndex++) {
                    if(Character.isDigit(string.charAt(digitIndex))) {
                        modifiedString += string.charAt(digitIndex);
                    }
                }

                return modifiedString;
            }
        }

        return modifiedString;
    }

您只需在代码中粘贴它即可尝试。

String[] stringArray = new String[]{"A1SS", "A2SS", "2SS", "AA222SS", "AN33"};
Log.d("---SO", " str 1: " + getModifiedString(stringArray[0]));
Log.d("---SO", " str 2: " + getModifiedString(stringArray[1]));
Log.d("---SO", " str 3: " + getModifiedString(stringArray[2]));
Log.d("---SO", " str 4: " + getModifiedString(stringArray[3]));
Log.d("---SO", " str 5: " + getModifiedString(stringArray[4]));

答案 4 :(得分:0)

我认为使用正则表达式(朋友之间的正则表达式或正则表达式)最简单:

private static final Pattern PAT_UNTIL_NUMBER = Pattern.compile("^[^0-9]*[0-9]+");

public static String removeCharsAfterNumber(String stringWithNumber) {
    Matcher m = PAT_UNTIL_NUMBER.matcher(stringWithNumber);
    if (m.find()) {
        return m.group();
    } else {
        throw new IllegalArgumentException("No number in string " + stringWithNumber);
        // or depending on requirements, may just return stringWithNumber
    }
}

考虑到问题中的字符串,此方法会生成您要求的输出。它考虑到您的号码可能包含多个数字。例如,A27B变为A27。如果有多个数字,它会在第一个数字后截断,例如A7B4SS给出A7。如果您想要不同的行为,根据您的要求修改正则表达式可能并不困难。

我不会在这里解释正则表达式的基础知识。有一些教程,使用你的搜索引擎。您当然希望了解代码中发生的事情。

如果由于某种原因您不能或不想使用正则表达式,其他一些答案将演示如何手动编写解决方案。这是我的版本。我希望这些评论可以解释发生了什么,我自己也认为这很简单明了。

    int index = 0;
    // find the number
    while (index < stringWithNumber.length() && ! Character.isDigit(stringWithNumber.charAt(index))) {
        index++;
    }
    if (index == stringWithNumber.length()) { // no number found
        throw new IllegalArgumentException("No number in string " + stringWithNumber);
    }
    // find end of number
    while (index < stringWithNumber.length() && Character.isDigit(stringWithNumber.charAt(index))) {
        index++;
    }
    return stringWithNumber.substring(0, index);

答案 5 :(得分:0)

1)你可以使用正则表达式来实现你的需要或迭代字符串来计算你可以执行子字符串的结束索引。

2)在您的示例中,您不会显示在一系列数字后截断字符串的情况。
我将向您展示两种解决方案

3)对字符串进行迭代,一般的想法是:未检测到搜索的模式,因此您返回原始字符串,无论是检测到它,还是返回与之关联的子字符串。

这是一个为每种情况提供一种方法的类,以及一个示例ex:

public class TruncateStringAfterDigit {

    public static void main(String[] args) {

        String s = "ba123";

        String valueTrimedAfterDigits = getValueTrimedAfterDigits(s);
        System.out.println(valueTrimedAfterDigits);

        String valueTrimedAfterDigit = getValueTrimedAfterOneDigit(s);
        System.out.println(valueTrimedAfterDigit);
    }

    private static String getValueTrimedAfterDigits(String s) {

        boolean isAtLeastANumberFound = false;

        for (int i = 0; i < s.length(); i++) {

            if (Character.isDigit(s.charAt(i))) {
                isAtLeastANumberFound = true;
            }

            else if (isAtLeastANumberFound) {
                return s.substring(0, i+1);
            }
        }

        return s;
    }

    private static String getValueTrimedAfterOneDigit(String s) {

        for (int i = 0; i < s.length(); i++) {

            if (Character.isDigit(s.charAt(i))) {
                return s.substring(0, i + 1);
            }
        }

        return s;
    }
}

渲染输出:

  

ba123

     

BA1

答案 6 :(得分:0)

试试吧

output = output.replaceAll("[^\\d]*$", "");

[^ \ d] * $ - 此正则表达式删除最后一个数字后面的所有符号

DEMO