例如我有一个数据:
A
B
C
lastdata A与B
我想为每行添加一条额外的评论,例如
A |这是A
B |这是B
C |这是C
lastdata A与B |这是A和B
现在我试图像这样手动进行
if(line.contains( "A")){
updatedLines.add(line + "|" + "this is A");
}
但是当我想使用“ A with B”时,我不能使用contains方法,因为它将自动使用“ this is A”注释,那么该怎么做才能创建这样的特定注释?
注意:我使用的真实数据有5000k行++,因此,如果有人反正不这样做就可以了,
答案 0 :(得分:1)
我认为处理此问题的一种方法是使用StringJoiner
,您可以执行以下操作:
StringJoiner sj = new StringJoiner(" and ");
if (line.contains("A")) {
sj.add("A");
}
if (line.contains("B")) {
sj.add("B");
}
...
if (sj.length() > 0) {
updatedLines.add(line + " | this is " + sj.toString());
}
答案 1 :(得分:0)
如果只有一行以“ lastdata”开头的行,则可以简单地将此条件放在首位,例如
If(line.startsWith("lastdata")
updatedLines.add(line + "|" + line.replace("lastdata", "this is"));
else
updatedLines.add(line + "|" + "this is "+line);
答案 2 :(得分:0)
您可以这样做
if (line.contains("A") && !line.contains("B")) {
updatedLines.add(line + "|" + "this is A");
}
if (line.contains("B") && !line.contains("A")) {
updatedLines.add(line + "|" + "this is B");
}
if (line.contains("A") && line.contains("B")) {
updatedLines.add(line + "|" + "this is A with B");
}
另一个例子
String result = line + " | this is " + Stream.of("A", "B", "C")
.filter(line::contains)
.collect(Collectors.joining(" with "));
updatedLines.add(result);
答案 3 :(得分:0)
您可以将String转换为Char数组,然后对字符串中的每个字符进行所需的操作
public static void main(String[] args) {
String testStr = "ABC";
StringBuilder sb = new StringBuilder();
char[] arrStr = testStr.toCharArray();
for (int i = 0; i < arrStr.length; i++) {
if(i == 0){
sb.append(testStr + "| This is " + arrStr[i]);
} else {
sb.append(" And " + arrStr[i]);
}
}
System.out.println(sb.toString());
}
答案 4 :(得分:0)
我有点过时,但是我尝试过的东西很有效:
const setProperty = require('lodash/setWith');
const formatedData = data
.reduce((acc, cur) =>
setProperty(acc, `${cur.catetory}.${cur.room_num}.${cur.checkin_date}`, cur, Object)
, {});
答案 5 :(得分:0)
使用帮助程序类,您可以在其中注册要检查的内容并让其为您构建注释
public class CommentAppender
{
private ArrayList<String> tokens;
private boolean orderMatters = false;
public CommentAppender()
{
this(false);
}
public CommentAppender(bool orderMatters)
{
tokens = new ArrayList<>();
this.orderMatters = orderMatters;
}
public void registerToken(String tok)
{
tokens.add(tok);
}
public String generateCommentForInput(String input)
{
ArrayList<String> matchedTokens = new ArrayList<>();
int offset = 0;
for(String tok : tokens)
{
int io = input.indexOf(tok, offset);
if(io != -1)
{
matchedTokens.add(tok);
offset = orderMatters? io + 1 : 0;
}
}
// Build the comment
StringBuilder sb = new StringBuilder();
if(matchedTokens.size() > 0)
{
sb.append("this is ");
sb.append(matchedTokens.get(0));
for(int i = 1; i < matchedTokens.size(); i++)
{
sb.append(" and ");
sb.append(matchedTokens.get(1));
}
}
return sb.toString();
}
}
CommentAppender ca = new CommentAppender();
ca.registerToken("A");
ca.registerToken("B");
ca.registerToken("C");