如何在不使用split方法的情况下在字母和数字之间拆分字符串ArrayList?

时间:2017-01-19 17:21:07

标签: java string arraylist split sublist

采用由以下字符串组成的字符串的arraylist:

subList

我想把它们拆开但是我想要使用拆分方法,因为我必须用我已经拆分的字母进行其他计算。

所以我决定使用public static void splitup(ArrayList<String> mystrings){ mystrings.subList(String[] letters, double numbers); } 方法。但我似乎无法找到正确实现这一点的正确例子。看看我的代码。下面是一个方法,它接受字符串的arraylist作为参数:

fewf
kskfj
pqoen
mgnwo

总的来说,我如何获取每个字母和数字串并将它们存储到自己的字符串数组中?例如,我想要

5677
654
444
888

一起出现在自己的字符串中
config.timeout_in = 1.day.beginning_of_day

是他们自己的号码。

3 个答案:

答案 0 :(得分:0)

您可以使用此answer中所示的正则表达式,然后检查此answer中显示的模式,如下所示:

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringSplitter {

    public static void main(String[] args) {
        ArrayList<String> myStringsList = new ArrayList<String>();
        ArrayList<String> stringsList = new ArrayList<String>();
        ArrayList<String> numbersList = new ArrayList<String>();

        myStringsList.add("fewf5677");
        myStringsList.add("kskfj654");
        myStringsList.add("pqoen444");
        myStringsList.add("mgnwo888");

        for (String s : myStringsList) {
            String splittedString[] = s.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");

            for (String string : splittedString) {
                Matcher match = Pattern.compile("[0-9]").matcher(string);
                if (match.find()) {
                    numbersList.add(string);
                } else {
                    stringsList.add(string);
                }
            }
        }

        for (String s : numbersList) {
            System.out.println(s);
        }

        for (String s : stringsList) {
            System.out.println(s);
        }
    }
}

这将输出:

5677
654
444
888
fewf
kskfj
pqoen
mgnwo

请记住,split()将正则表达式作为参数,而不是String,因此,您可以执行类似上述代码的操作来获得所需的输出。

答案 1 :(得分:0)

你要做的事情有点奇怪。你为什么要重载subList方法?

您可以做的一个可能示例是迭代mystrings列表并将每个字符串分成两个变量。 http://crunchify.com/how-to-iterate-through-java-list-4-way-to-iterate-through-loop/

如果您熟悉正则表达式,可以使用它们。

如果不是,您可以遍历字符串字符以将数字与数字分开。 http://java11s.blogspot.com/2012/02/java-program-to-separate-alphabets-and.html

然后将结果添加到两个单独的列表List<String>List<Double>(或可能List<Integers>)或创建自定义数据结构。

答案 2 :(得分:0)

您可以尝试这种方式:

如果我们认为您输入的格式是字符串,您要在其中提取整数,那么您应该逐个测试一个元素:

主要

public static void main(String[] a) {
    List<String> myList = new ArrayList<>();
    myList.add("fewf5677");
    myList.add("kskfj654");
    myList.add("pqoen444");
    myList.add("mgnwo888");

    List<String> listStrings = new ArrayList<>();
    List<Integer> listIntegers = new ArrayList<>();

    for (int i = 0; i < myList.size(); i++) {
        listStrings.add(getStringPart(myList.get(i)));
        listIntegers.add(Integer.parseInt(getIntegerPart(myList.get(i))));
    }

    System.out.println(listStrings);
    System.out.println(listIntegers);

}

获取元素的字符串部分

private static String getStringPart(String str) {
    String s = "";
    for (int i = 0; i < str.length(); i++) {
        if (!testInteger(str.charAt(i))) {
            s += str.charAt(i);
        } else {
            break;
        }
    }
    return s;
}

获取元素的整数部分

private static String getIntegerPart(String str) {
    String s = "";
    for (int i = 0; i < str.length(); i++) {
        if (testInteger(str.charAt(i))) {
            s += str.charAt(i);
        }
    }
    return s;
}

检查str是否为Integer的方法

private static boolean testInteger(char str) {
    try {
        Integer.parseInt(str+"");
        return true;
    } catch (Exception e) {
        return false;
    }
}

<强>输出

[fewf, kskfj, pqoen, mgnwo]
[5677, 654, 444, 888]

希望这可以帮到你。