gpt4 book ai didi

java - Java中分割字符串的有效方法

转载 作者:行者123 更新时间:2023-12-02 06:22:00 24 4
gpt4 key购买 nike

我有一些像这样的模式的输入:

org.apache.felix.dm;version="[4.1,5)",org.osgi.framework;version="[1.5,2)",org.osgi.service.cm;version="[1.3,2)",org.osgi.service.deploymentadmin;version="[1.0,2)",org.osgi.service.deploymentadmin.spi;version="[1.0,2)",org.osgi.service.event;version="[1.2,2)",org.osgi.service.log;version="[1.3,2)",org.osgi.service.metatype;version="[1.3,2)",org.osgi.util.tracker;version="[1.4,2)"

我需要将其拆分并将其存储在对象或列表中,如下所示:

  • 对象1:

    String name = "org.apache.felix.dm";
    String[] versions = {4.1.0, 5.0.0}
  • 对象2:

    String name = "org.osgi.framework";
    String[] versions = {1.5.0, 2.0.0}

最佳答案

我会分三步解决这个问题

第 1 步:

将文本分成名称和版本对。所以你最终会得到

org.apache.felix.dm;version="[4.1,5)"
org.osgi.framework;version="[1.5,2)"
org.osgi.service.cm;version="[1.3,2)"
org.osgi.service.deploymentadmin;version="[1.0,2)"
org.osgi.service.deploymentadmin.spi;version="[1.0,2)"
org.osgi.service.event;version="[1.2,2)"
org.osgi.service.log;version="[1.3,2)"
org.osgi.service.metatype;version="[1.3,2)"
org.osgi.util.tracker;version="[1.4,2)"

为此,您可以执行以下操作:

String text = "org.apache.felix.dm;version=\"[4.1,5)\",org.osgi.framework;version=\"[1.5,2)\",org.osgi.service.cm;version=\"[1.3,2)\",org.osgi.service.deploymentadmin;version=\"[1.0,2)\",org.osgi.service.deploymentadmin.spi;version=\"[1.0,2)\",org.osgi.service.event;version=\"[1.2,2)\",org.osgi.service.log;version=\"[1.3,2)\",org.osgi.service.metatype;version=\"[1.3,2)\",org.osgi.util.tracker;version=\"[1.4,2)\"";
String[] strArray = text.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");

strArray 现在包含这些对。

正在做

for (String string : strArray) {
System.out.println(string);
}

打印

org.apache.felix.dm;version="[4.1,5)"
org.osgi.framework;version="[1.5,2)"
org.osgi.service.cm;version="[1.3,2)"
org.osgi.service.deploymentadmin;version="[1.0,2)"
org.osgi.service.deploymentadmin.spi;version="[1.0,2)"
org.osgi.service.event;version="[1.2,2)"
org.osgi.service.log;version="[1.3,2)"
org.osgi.service.metatype;version="[1.3,2)"
org.osgi.util.tracker;version="[1.4,2)"

第 2 步:

为 strArray 中的每个条目创建一个对象,并将它们存储在数组或列表中(我这次选择 ArrayList,你可以选择任何你想要的):

    String text = "org.apache.felix.dm;version=\"[4.1,5)\",org.osgi.framework;version=\"[1.5,2)\",org.osgi.service.cm;version=\"[1.3,2)\",org.osgi.service.deploymentadmin;version=\"[1.0,2)\",org.osgi.service.deploymentadmin.spi;version=\"[1.0,2)\",org.osgi.service.event;version=\"[1.2,2)\",org.osgi.service.log;version=\"[1.3,2)\",org.osgi.service.metatype;version=\"[1.3,2)\",org.osgi.util.tracker;version=\"[1.4,2)\"";
String[] strArray = text.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
ArrayList<MyObject> list = new ArrayList<>();
for (String string : strArray) {
String currentPair[] = string.split(";");
list.add(new MyObject(currentPair[0], currentPair[1]
.replaceAll("\"", "")
.replaceAll("version=", "")
.replaceAll("\\[", "")
.replaceAll("\\)", "").split(",")));
}

for (MyObject myObject : list) {
System.out.print("Name: " + myObject.name + " - Versions:");
for (String version : myObject.versions) {
System.out.print(version + " ");
}
System.out.println();
}

MyObject 是您对象的类。

打印以下内容:

Name: org.apache.felix.dm - Versions:4.1 5 
Name: org.osgi.framework - Versions:1.5 2
Name: org.osgi.service.cm - Versions:1.3 2
Name: org.osgi.service.deploymentadmin - Versions:1.0 2
Name: org.osgi.service.deploymentadmin.spi - Versions:1.0 2
Name: org.osgi.service.event - Versions:1.2 2
Name: org.osgi.service.log - Versions:1.3 2
Name: org.osgi.service.metatype - Versions:1.3 2
Name: org.osgi.util.tracker - Versions:1.4 2

现在这几乎就是您想要的,唯一剩下的就是将版本号格式化为 3 个点。

第 3 步:将版本字符串格式化为 3 个点:

为此,我编写了一个方法并将 currentpair[1]... 作为参数

public static void main(String[] args) {
String text = "org.apache.felix.dm;version=\"[4.1,5)\",org.osgi.framework;version=\"[1.5,2)\",org.osgi.service.cm;version=\"[1.3,2)\",org.osgi.service.deploymentadmin;version=\"[1.0,2)\",org.osgi.service.deploymentadmin.spi;version=\"[1.0,2)\",org.osgi.service.event;version=\"[1.2,2)\",org.osgi.service.log;version=\"[1.3,2)\",org.osgi.service.metatype;version=\"[1.3,2)\",org.osgi.util.tracker;version=\"[1.4,2)\"";
String[] strArray = text.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
ArrayList<MyObject> list = new ArrayList<>();
for (String string : strArray) {
String currentPair[] = string.split(";");
list.add(new MyObject(currentPair[0], addDots(currentPair[1]
.replaceAll("\"", "")
.replaceAll("version=", "")
.replaceAll("\\[", "")
.replaceAll("\\)", "").split(","), 3)));
}

for (MyObject myObject : list) {
System.out.print("Name: " + myObject.name + " - Versions:");
for (String version : myObject.versions) {
System.out.print(version + " ");
}
System.out.println();
}
}

public static String[] addDots(String toAdd[], int dotcount) {
String[] formattedVersions = new String[toAdd.length];
for (int i = 0; i < toAdd.length; i++) {
ArrayList<String> digits = new ArrayList<>();
digits.add(toAdd[i]);
if(toAdd[i].contains(".")) {
digits = new ArrayList<>(Arrays.asList(toAdd[i].split("\\.")));
}
for(int x = digits.size(); x < dotcount; x++) {
digits.add("0");
}
String curretnFormattedVersion = "";
for (int j = 0; j < digits.size() - 1; j++) {
curretnFormattedVersion += digits.get(j) + ".";
}
curretnFormattedVersion += digits.get(dotcount - 1);
formattedVersions[i] = curretnFormattedVersion;
}
return formattedVersions;
}

现在打印以下内容:

Name: org.apache.felix.dm - Versions: 4.1.0 5.0.0 
Name: org.osgi.framework - Versions: 1.5.0 2.0.0
Name: org.osgi.service.cm - Versions: 1.3.0 2.0.0
Name: org.osgi.service.deploymentadmin - Versions: 1.0.0 2.0.0
Name: org.osgi.service.deploymentadmin.spi - Versions: 1.0.0 2.0.0
Name: org.osgi.service.event - Versions: 1.2.0 2.0.0
Name: org.osgi.service.log - Versions: 1.3.0 2.0.0
Name: org.osgi.service.metatype - Versions: 1.3.0 2.0.0
Name: org.osgi.util.tracker - Versions: 1.4.0 2.0.0

这应该正是您所需要的。

我无法判断这是否有效,但从代码的长度来看,我会说不,但是嘿,它的工作原理:D

关于java - Java中分割字符串的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55827275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com