如何为字符串java指定一个特定的if

时间:2018-10-24 07:51:04

标签: java if-statement

例如我有一个数据:

  

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行++,因此,如果有人反正不这样做就可以了,

6 个答案:

答案 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");