迭代字符串&每次为指定的索引提取子字符串

时间:2017-01-09 06:11:22

标签: java

我试图从每个循环的行中提取指定索引的子字符串。这是字符串:

String allPins = "16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472"; 

它不是类型字符串的数组。前14位是批号。我希望每次循环遍历字符串时提取第二个12位数字,即引脚号作为子字符串。

到目前为止,这是我的代码:

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

      String str = allPins.substring((28*i)+15,(28*i)+28);
      String test  = str;     

      System.out.println(test);  
}

//我得到一个outOfBoundError。

//请帮我解决如何最好地提取子串。

6 个答案:

答案 0 :(得分:0)

正如其他人已经评论过的那样,如果你只是用空格分割字符串,你可能会更容易。在这种情况下,我将拆分\s+,意思是一个或多个空白字符。

String[] parts = allPins[i].split("\\s+");
for (int i=1; i < parts.length; i=i+2) {     // iterate and print odds only
    System.out.println(parts[i]);
}

如果您知道您的数据格式正确,即每个12位数的PIN始终以14位批号开头(并且前面只有该数字),这种方法应该没问题。

如果您有不正常的数据,而您的问题并不意味着,那么您可能需要使用匹配器。

答案 1 :(得分:0)

String str = allPins.substring((28*i)+15,(28*i)+28);

上面一行是问题,当i值增加时会导致越界错误,因为你要比字符串的定义索引更多。

更好的方法是用空格循环和分割并检查......

String str = allPins.substring(allPins.split(" ")[1].toString());

答案 2 :(得分:0)

  

我想提取第二个12位数字,即引脚编号为a   每次我循环遍历字符串时子字符串。

您甚至不需要使用子字符串方法。请参阅以下示例:

  for (String num: allPins.split(" ")) {
     if(num.length() == 12)
         System.out.println(num);
  }

答案 3 :(得分:0)

是的,您可以尝试@Kevin Esche建议,请尝试根据空格分割字符串。这应该对你有帮助。

尝试使用以下代码段:

for(int i = 0; i&lt; allPins.length(); i ++){

  String[] str = allPins.split("\\s");
  String test  = str[1];     

  System.out.println(test);  

}

答案 4 :(得分:0)

拆分字符串将是更好的方法。

尝试

String[] strArr = allPins.split(" ");

More of white space splitting

现在您有一个字符串数组,其中包含您的批号和密码相邻的字符串。您可以通过迭代for循环来访问它们。

还要记住要做

string.equals("checking string")

而不是

string== string2

检查平等。

答案 5 :(得分:0)

String [] s1 = allPins.split(&#34;&#34;);     的System.out.println(s1.length);

for(int i = 0; i&lt; s1.length / 2 -1; i ++){

String str = allPins.substring((28*i)+15,(28*i)+28);
String test  = str;     

System.out.println(test);  

}