我有一些像这种模式的输入:
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}
答案 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
答案 1 :(得分:0)
只需使用此代码,此代码取决于您在Question中输入的字符串
package com.java;
public class Test {
public static void main( String[] args ) {
String inputString = Test.getString();
String[] firstSplit = inputString.split("\",");
int counter = 1;
for (String firstString : firstSplit) {
String[] secondSplit = firstString.split(";");
for(String secondString : secondSplit) {
if(secondString.substring(0,1).equals("o")) {
System.out.println("Object" + counter++);
String name = secondString;
System.out.println("name = " + name);
}
if(secondString.substring(0,7).equals("version")) {
String[] versions = new String[2];
versions[0] = secondString.substring(10,13) + ".0";
versions[1] = secondString.substring(14,15) + ".0.0";
System.out.println("Version = " + versions[0] + ", " + versions[1]);
}
}
}
}
static String getString() {
return "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)\"";
}
}
结果将是
Object1
name = org.apache.felix.dm
Version = 4.1.0, 5.0.0
Object2
name = org.osgi.framework
Version = 1.5.0, 2.0.0
Object3
name = org.osgi.service.cm
Version = 1.3.0, 2.0.0
Object4
name = org.osgi.service.deploymentadmin
Version = 1.0.0, 2.0.0
Object5
name = org.osgi.service.deploymentadmin.spi
Version = 1.0.0, 2.0.0
Object6
name = org.osgi.service.event
Version = 1.2.0, 2.0.0
Object7
name = org.osgi.service.log
Version = 1.3.0, 2.0.0
Object8
name = org.osgi.service.metatype
Version = 1.3.0, 2.0.0
Object9
name = org.osgi.util.tracker
Version = 1.4.0, 2.0.0