有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在字符串数组之间添加单词?

我想在数组中的每个字符串之间附加单词AND,但我不希望它位于字符串的末尾。以下是我正在尝试的:

假设我想通过First, Second, Third

public void addString(String... myString) {
   StringBuilder sb = new StringBuilder();

   for(int i = 0; i < myString.length -1;) {
      sb.append("(" + myString[i] + " AND " + myString[i+1] + ")");
      i++;
   }

   System.out.println(sb);
}

我的输出是(First AND Second)(Second AND Third)

但我想要(First AND Second AND Third)

我做错了什么


共 (4) 个答案

  1. # 1 楼答案

    您可以执行以下操作-

    Arrays.asList(myString).toString().replaceAll(",", " AND").replace("[", "(").replace("]", ")")
    
    • Arrays.asList(myString)array转换为List
    • toString()将其转换为类似[ele1, ele2, ele 3]的字符串
    • 然后使用replaceAllreplace方法给出 适当的输出

    第二个选项是使用^{}提供的^{}方法

  2. # 2 楼答案

    在元素之间使用分隔符时,最常用的方法是先添加分隔符,然后添加字符串。只跳过第一个元素之前的分隔符

    public void addString(String... myString) {
        String separator = " AND ";
    
        StringBuilder sb = new StringBuilder();
    
        sb.append('(');
    
        boolean needSeparator = false;
        for(String string : myString) {
            if (needSeparator) {
                sb.append(separator);
            } else {
                needSeparator = true;
            }
            sb.append(string);
        }
    
        sb.append(')');
    
        System.out.println(sb);
     }
    

    如果你打电话给addString("First", "Second", "Third"),你会得到

    (First AND Second AND Third)
    

    只需1个输入addString("First")就可以很好地工作

    (First)
    

    甚至是空输入addString(),这会使我在这里看到的大多数其他解决方案崩溃

    ()
    

    可以将打印第一个元素移出循环,这样循环就不必检查是否需要省略分隔符(性能增益最小),但这会导致代码可读性降低。例如:

    if (myString.length > 0) {
        // append first element without separator
        sb.append(myString[0]);
    
        // implicitly checks that length > 1
        for (int i = 1; i < myString.length; i++) {
            // append separator unconditionally
            sb.append(separator);
            sb.append(myString[i]);
        }
    }
    
  3. # 3 楼答案

    为了满足您的需求,我可能会在StringUtils中使用join方法

    StringUtils.join Docs

    从文件中:

    public static String join(Object[] array,
              String separator)
    
    Joins the elements of the provided array into a single String containing the provided list of elements.
    
    No delimiter is added before or after the list. A null separator is the same as an empty String (""). Null objects or empty strings within the array are represented by empty strings.
    
     StringUtils.join(null, *)                = null
     StringUtils.join([], *)                  = ""
     StringUtils.join([null], *)              = ""
     StringUtils.join(["a", "b", "c"], "--")  = "a--b--c"
     StringUtils.join(["a", "b", "c"], null)  = "abc"
     StringUtils.join(["a", "b", "c"], "")    = "abc"
     StringUtils.join([null, "", "a"], ',')   = ",,a"
    
    
    Parameters:
        array - the array of values to join together, may be null
        separator - the separator character to use, null treated as ""
    Returns:
        the joined String, null if null array input
    
  4. # 4 楼答案

    调整你的答案如下:

    public void addString(String... myString) {
       StringBuilder sb = new StringBuilder("(");
    
       for(int i = 0; i < myString.length -1; i++) {
          sb.append(myString[i] + " AND ");
       }
       if(myString.length == 0)
           sb.append(")");
       else
           sb.append(myString[myString.length - 1]);
       System.out.println(sb);
    }
    

    唯一的变化是:

    • 创建包含起始(StringBuilder
    • 添加除最后一个元素之外的所有元素,并在其后面附加"AND"
    • 添加最后一个元素和结尾)

    算法的重复部分是放置内部元素的部分。这也包括myString具有长度1的情况。如果没有元素,则跳过最后一次添加,并添加结束“)”