Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不使用拆分方法的情况下拆分字母和数字之间的字符串数组列表?_Java_String_Arraylist_Split_Sublist - Fatal编程技术网

Java 如何在不使用拆分方法的情况下拆分字母和数字之间的字符串数组列表?

Java 如何在不使用拆分方法的情况下拆分字母和数字之间的字符串数组列表?,java,string,arraylist,split,sublist,Java,String,Arraylist,Split,Sublist,获取由以下字符串组成的字符串数组列表: fewf5677 kskfj654 pqoen444 mgnwo888 我想把它们分开,但我不想使用分开的方法,因为我必须用我分开的字母进行其他计算 所以我决定使用子列表方法。但我似乎找不到一个恰当的例子来正确实现这一点。看看我的代码。下面是一个将字符串的arraylist作为参数的方法: public static void splitup(ArrayList<String> mystrings){ mystrings.subL

获取由以下字符串组成的字符串数组列表:

fewf5677
kskfj654
pqoen444
mgnwo888
我想把它们分开,但我不想使用分开的方法,因为我必须用我分开的字母进行其他计算

所以我决定使用
子列表
方法。但我似乎找不到一个恰当的例子来正确实现这一点。看看我的代码。下面是一个将字符串的arraylist作为参数的方法:

public static void splitup(ArrayList<String> mystrings){ 
     mystrings.subList(String[] letters, double numbers);
}
在他们自己的圈子里

5677
654
444
888

作为他们自己的号码。

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

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);
        }
    }
}

请记住,使用正则表达式作为参数,而不是字符串,因此,您可以执行类似于上述代码的操作以获得所需的输出。

您尝试执行的操作有点奇怪。为什么要重载子列表方法

您可以做的一个可能的示例是迭代
mystrings
列表,并将每个字符串分成两个变量。

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

若并没有,你们可以迭代字符串字符,将字母和数字分开。


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

您可以尝试以下方法:

如果我们认为输入的格式是“强”>字符串,在其中要提取整数,则应该用一个元素来测试:

Main

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 getIntegerPart(String str) {
    String s = "";
    for (int i = 0; i < str.length(); i++) {
        if (testInteger(str.charAt(i))) {
            s += str.charAt(i);
        }
    }
    return s;
}
[fewf, kskfj, pqoen, mgnwo]
[5677, 654, 444, 888]

希望这能对您有所帮助。

字符串总是以字母开头,以数字结尾吗?什么
mystrings.subList(String[]字母,双数字)你应该怎么做?子列表签名是以下
公共列表子列表(int-fromIndex,int-toIndex)
,仅接受int作为输入参数…是。总是。但字母和数字的数量从未定义过。例如,我可以在这个字符串数组列表中有一个字符串“abc123”和“helloeveryoneilovepie987654321”。@salvolds,这样我就不能使用子列表来拆分它们了?这是在O(n)还是O(n^2)运行时运行的?我不知道如何测量时间,但如果你愿意,你可以自己做。否则,您可以尝试改进它
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;
}
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]