Java 解析集合<;字符串>;并创建一个新集合<;字符串>;基于公共分隔符
我试图获取一组字符串,并使用最有效的算法将它们转换为如下所示。有什么想法吗Java 解析集合<;字符串>;并创建一个新集合<;字符串>;基于公共分隔符,java,Java,我试图获取一组字符串,并使用最有效的算法将它们转换为如下所示。有什么想法吗 Set<String> directoryList = new HashSet<String>() { { add("a/a1/a2/a3"); add("b/b1/b2/b3"); add("c/c1/c2/c3/c4"); } }; //need construct a new Set<String
Set<String> directoryList = new HashSet<String>() {
{
add("a/a1/a2/a3");
add("b/b1/b2/b3");
add("c/c1/c2/c3/c4");
}
};
//need construct a new Set<String> which contains:
a
a/a1
a/a1/a2
a/a1/a2/a3
b
b/b1
b/b1/b2
b/b1/b2/b3
c
c/c1
c/c1/c2
c/c1/c2/c3
c/c1/c2/c3/c4
Set directoryList=new HashSet(){
{
添加(“a/a1/a2/a3”);
添加(“b/b1/b2/b3”);
添加(“c/c1/c2/c3/c4”);
}
};
//需要构造一个包含以下内容的新集合:
A.
a/a1
a/a1/a2
a/a1/a2/a3
B
b/b1
b/b1/b2
b/b1/b2/b3
C
c/c1
c/c1/c2
c/c1/c2/c3
c/c1/c2/c3/c4
您可以用这种方式尝试
Set<String> directoryList = new HashSet<String>() {
{
add("a/a1/a2/a3");
add("b/b1/b2/b3");
add("c/c1/c2/c3/c4");
}
};
Set<String> newSet=new LinkedHashSet<String>();
for(String i:directoryList){
String[] str=i.split("/");
StringBuilder sb=new StringBuilder();
for(String s:str){
sb.append(s);
newSet.add(sb.toString());
sb.append("/");
}
}
是
这是我提出的另一种方法,希望能有所帮助,我只是解决了一个案例,我相信你知道如何扩展它
public class LetterExtraction {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Set<String> directoryList = new TreeSet<String>() {
{
add("a-a1-a2-a3");
add("b-b1-b2-b3");
add("c-c1-c2-c3-c4");
}
};
for (String s : directoryList) {
//String s = "a-a1-a2-a3-a4";
String outCome = "";
char[] c = s.toCharArray();
char ch = 0;
for (int i = 0; i < c.length; i++) {
if (c[i] == '-') {
System.out.print(outCome);
System.out.print("\n");
outCome += c[i];
} else {
outCome += c[i];
}
}
System.out.println(outCome);
}
}
}
LinkedHashSet用于自然排序,对吗?使用LinkedHashSet与树集相比有什么优势吗?两者似乎都很自然地排序(a、a/a1、a/a1/a2..等等),也会将答案更新为LinkedHashSet而不是LinkedHashSet,因为这会在Java1中导致编译错误。6@c12是
LinkedHashSet
用于维持秩序<代码>树集使用树结构(算法手册中的红黑树)实现。集合中的元素是经过排序的,但add、remove和contains方法的时间复杂度为O(log(n))
。它提供了几种处理有序集合的方法,如first()、last()、headSet()、tailSet()等。LinkedHashSet
介于HashSet
和TreeSet
之间。它被实现为一个哈希表,其中有一个链表
,因此它提供了插入顺序。基本方法的时间复杂度是O(1)。我不明白为什么它从c开始而不是a?它从c开始,因为哈希集没有排序。试试TreeSet。
a
a/a1
a/a1/a2
a/a1/a2/a3
b
b/b1
b/b1/b2
b/b1/b2/b3
c
c/c1
c/c1/c2
c/c1/c2/c3
c/c1/c2/c3/c4
public class LetterExtraction {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Set<String> directoryList = new TreeSet<String>() {
{
add("a-a1-a2-a3");
add("b-b1-b2-b3");
add("c-c1-c2-c3-c4");
}
};
for (String s : directoryList) {
//String s = "a-a1-a2-a3-a4";
String outCome = "";
char[] c = s.toCharArray();
char ch = 0;
for (int i = 0; i < c.length; i++) {
if (c[i] == '-') {
System.out.print(outCome);
System.out.print("\n");
outCome += c[i];
} else {
outCome += c[i];
}
}
System.out.println(outCome);
}
}
}
a
a-a1
a-a1-a2
a-a1-a2-a3
b
b-b1
b-b1-b2
b-b1-b2-b3
c
c-c1
c-c1-c2
c-c1-c2-c3
c-c1-c2-c3-c4