我有什么:
我有一个看起来像这样的字符串
"a, b, c\nd, e, f\ng, h, i"
每个新行代表一个新行,每个逗号代表一个不同的列
我想做什么:
我试图将其传递到列表中,以便它看起来像这样:
[ [a,d,g], [b,e,h], [c,f,i] ]
它模仿一个表,一个看起来像这样的表:
a b c
d e f
g h i
换句话说,我正在列出每一列。
我知道该怎么做:
我知道如果我正在制作行列表,我可以这样做:
String rows[]= text.split("\\r?\\n");
并最终得到一组行:
{"a, b, c", "d, e, f", "g, h, i"}
然后将每个字符串格式化为一个列表,但是如何使用带有1或无循环的正则表达式完成上面所述的操作?我正在尝试使用O(n)
或O(nlogn)
算法,其中n
是行数。谢谢:))
我目前正在做的事情:
//This is pseudocode so it's not valid
new list of list called columnList
String rows[]= text.split("\\r?\\n");
for each row in rows:
i=0
new splitRow = row split by comma
for each element in splitRow:
columnList(i).add(element)
i++
这是我提出的算法,但它非常慢,需要嵌套循环。我不认为它非常有效。
更多信息:
我在Java中完成所有这些
我无法使用任何哈希结构,所以没有字典可悲
很抱歉,如果我的格式很奇怪,我过去在回答问题时遇到了问题。
答案 0 :(得分:0)
我认为步骤应该是:
看起来像是:
String s = "a, b, c\nd, e, f\ng, h, i";
String[] elements = s.replace("\n", ",").split(",");
String[][] table = new String[3][3];
for (int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++){
table[i][j] = elements[(j * 3) + i];
}
}
希望得到这个帮助。
答案 1 :(得分:0)
将您的解决方案与嵌套循环一起使用。如果您担心它不是O(n),请不要:它 O(n)。所花费的时间总是与输入元素的数量成正比。
具体示例#1 :在3行3列输入中,总共有9个元素。外循环执行3次。内循环每次执行3次,共9次。 9个输入= 9个内循环执行。
具体示例#2 :现在假设您给它一个5行,7列输入。你总共有35件商品。外循环执行五次。内循环每次执行七次,总共5x7 = 35次。 35个输入= 35个内循环执行。
摘要: c 列输入 r 行怎么样?总输入项= r x c 。外循环执行 r 次,内循环执行每次 c 次。因此, r x c 总内循环迭代。 r x c 输入项= r x c 内循环迭代。
无论输入元素的总数是多少,内部循环都会执行多次。这实际上是 O(n)的定义。
答案 2 :(得分:0)
您可以尝试此代码
String text = "a, b, c\nd, e, f\ng, h, i";
Pattern pattern = Pattern.compile("(.+)(?:\r?\n|$)");
Matcher matcher = pattern.matcher(text);
List<List<String>> result = Lists.newArrayList();
while (matcher.find()){
List<String> row = Splitter.on(",").trimResults().splitToList(matcher.group(1));
result.add(row);
}
System.out.println(result);
记住导入:
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
希望得到这个帮助。