我在Java工作。我有一个参数列表存储在一个字符串中,该字符串来自excel。我想只在每个新行的连字符处拆分它。这个字符串存储在每个excel单元格中,我试图使用Apache poi提取它。格式如下:
}
我想要什么
看起来像这样的数组或arraylist
String text =
"- I am string one\n" +
"-I am string two\n" +
"- I am string-three\n" +
"with new line\n" +
"-I am string-four\n" +
"- I am string five";
我尝试过什么
我尝试使用这样的分割函数:
[I am string one,
I am string two,
I am string-three with new line,
I am string-four,
I am string five]
但我得到的输出不是我想要的
我的O / P
String[] newline_split = text.split("-");
我可能需要稍微调整分割功能,但不能理解如何,因为字符串中有很多连字符和新行。
P.S。
如果我尝试仅在新行中进行拆分,则行[, I am string one,
I am string two,
I am string, // wrong
three // wrong
with new line, // wrong
I am string, // wrong!
four, // wrong!
I am string five]
会分成两部分,这也是不正确的。
修改
在您不假思索地进行downvote之前,请知道字符串中的这些数据格式不正确,就像上面显示的那样。它来自我收到的excel文件。我正在尝试使用apache poi以字符串的形式从每个excel单元格中提取所有内容。
我故意试图保持客户给我的格式。对于那些对- I am string-three \n with new line
内部的描述感到困惑的人,我已经改变了,因为我不能在这里发布内容,因为它违反了我工作场所的隐私。
答案 0 :(得分:1)
我会这样做:
import java.util.*;
public class MyClass {
public static void main(String args[]) {
String A = "- I am string one \n" +
" -I am string two\n" +
" - I am string-three \n" +
" with new line\n" +
" -I am string-four\n" +
"- I am string five";
String[] s2 = A.split("\r?\n");
List<String> lines = new ArrayList<String>();
String line = "";
for (int i = 0; i < s2.length; i++) {
String ss = s2[i].trim();
if (i == 0) { // first line MUST start with "-"
line = ss.substring(1).trim();
} else if (ss.startsWith("-")) {
lines.add(line);
ss = ss.substring(1).trim();
line = ss;
} else {
line = line + " " + ss;
}
}
lines.add(line);
System.out.println(lines.toString());
}
}
我希望它有所帮助。
一点解释:
我将逐行处理,修剪每一个。 如果它以' - '开头,则表示前一行的结尾,因此我将其包含在列表中。如果没有,我会与前一行连接。
答案 1 :(得分:1)
你可以
-
(在下一行):.replaceAll("\\R(?!-)", " ")
应该做的伎俩
\R
(在字符串文字中写为"\\R"
,因为Java 8可用于表示line separators (?!...)
是negative-look-ahead mechanism - 确保在使用它之后没有-
(不会在匹配中包含它,因此我们不会删除潜在的-
与之匹配的商品)然后删除放置在每行开头的-
(还允许包含跟随的空格以修剪字符串的开头)。换句话说,替换放置-
"\\R"
^
这应该可以解决问题:.replaceAll("(?<=\\R|^)-\\s*","")
.split("\\R")
演示:
String text =
"- I am string one\n" +
"-I am string two\n" +
"- I am string-three\n" +
"with new line\n" +
"-I am string-four\n" +
"- I am string five";
String[] split = text.replaceAll("\\R(?!-)", " ")
.replaceAll("(?<=\\R|^)-\\s*","")
.split("\\R");
for (String s: split){
System.out.println("'"+s+"'");
}
输出(用'
包围以显示结果的开始和结束):
'I am string one'
'I am string two'
'I am string-three with new line'
'I am string-four'
'I am string five'
答案 2 :(得分:0)
看起来好像是要拆分每行的第一行 - 所以你需要删除&#34;换行符的每个实例 - &#34;
str.replace("\n-", '\n')
然后删除最初的&#34; - &#34;
str = str.substring(1);