【问题标题】:Converting and extracting integers from a string从字符串中转换和提取整数
【发布时间】:2015-03-22 23:28:58
【问题描述】:

我正在尝试做这样的事情:

输入:一个类似的字符串(数字是随机的):

"<12, 3>, <4, 5>, <23, 5>, <33, 56>" 

输出:一个像这样的整数数组

[12, 3, 4, 5, 23, 5, 33, 56]

我尝试使用一些语法和一些拆分,但我总是以字符串或字符结尾。

【问题讨论】:

  • 字符串中有&lt;吗?
  • 是的,字符串只有那个格式,只有数字可以改变
  • 你为什么不直接删除“”字符,然后用“,”分割?
  • 如果我只是删除“”并用“,”分割,我应该只找到 {12,3,4,5,23,5,33,56} 吗?

标签: java regex


【解决方案1】:

这应该做你想做的事:

package split;

public class Main {

    public static void main(String[] args){

        String mString = "<12,3>,<4,5>,<23,5>,<33,56>"; 
        mString = mString.replace("<", ""); 
        mString = mString.replace(">", ""); 
        String[] stringArray = mString.split(","); 

        int[] intArray = new int[stringArray.length];
        int index = 0; 
        for(String mS : stringArray){
            intArray[index] = Integer.parseInt(mS); 
            index++;
        }

        for(int i : intArray){
            System.out.println(i); 
        }
    }
}

要将String 更改为int,请使用Integer.parseIn("your String");。

【讨论】:

    【解决方案2】:

    有时,正则表达式的诀窍不是尝试匹配您尝试解析的内容的完整格式,而是找到您正在寻找的内容。

    在您的情况下,由于您想要展平数字列表,因此您需要查找的只是一个数字序列。所以这很容易做到。

    List<Integer> findNumbers(String s) {
        List<Integer> result = new ArrayList<Integer>();
        Pattern pattern = Pattern.compile("\\d+");
        Matcher matcher = pattern.matcher(s);
        while (matcher.find()) {
            result.add(Integer.parseInt(matcher.group()));
        }
        return result;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-22
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 2022-10-16
      • 2019-09-14
      相关资源
      最近更新 更多