我需要以输入字符串中的数字开头的字符串

时间:2016-08-03 09:48:40

标签: android string substring indexoutofboundsexception

这是我的代码

String itemName = "Daily 60k tube";
  String name="";
  if(itemName.matches(".*\\d+.*"))
        {
            itemName = itemName.substring(itemName.indexOf(" ") + 1);
            itemName = itemName.substring(0, itemName.indexOf(" "));
            name = itemName;
        }

我在输出中需要60k作为我的名字。但它有异常崩溃。 这是例外。

java.lang.StringIndexOutOfBoundsException: length=6; regionStart=0; regionLength=-1
                                                                at java.lang.String.startEndAndLength(String.java:298)
                                                                at java.lang.String.substring(String.java:1087)

我的输出应该是" 60k"。请帮我解决这个问题。提前谢谢。

4 个答案:

答案 0 :(得分:1)

你可以试试这个

String itemName = "Daily 60k tube";
String name="";
if(itemName.matches(".*\\d+.*"))
{
    String[] array = itemName.split(" "); // Daily 60k tube
    // array: {"Daily","60k","tube"}
    for (String item : array) {
        if (item.matches(".*\\d+.*")) {
             name = item;
         }
    }
}

编辑您也可以使用此

替换该行
  (item.matches(".*\\d+.*" + "k")

所以它看起来像

    String[] array = itemName.split(" "); // Daily 60k tube
    // array: {"Daily","60k","tube"}
    for (String item : array) {
        if (item.matches(".*\\d+.*" + "k") {
             name = item;
         }
    }

希望这有帮助

答案 1 :(得分:1)

试试这段代码

String Name;
String[] array = itemName.split(" ");
for (int i = 0; i < array.length;i++){
    if(Character.isDigit(array[i].charAt(0)))
    {
        Name = array[i];
        break;
    }

}

希望这会有所帮助。 快乐编码:)

答案 2 :(得分:0)

我认为这会对你有所帮助。

 int i=itemName.indexOf(" ") + 1;
    itemName = itemName.substring(i);
    i=itemName.indexOf(" ");
    itemName = itemName.substring(0,i);
    name = itemName;

答案 3 :(得分:0)

尝试这种方式:

private static String getResult(String itemName) {
        String[] result = itemName.split(" ");
        for (String i : result) {
            if (Character.isDigit(i.charAt(0))) {
                return i;
            }
        }
        return null;
    }