在java中,从字符串数组返回单词并在它们之间插入符号?

在java中,从字符串数组返回单词并在它们之间插入符号?,java,arrays,string,bots,discord,Java,Arrays,String,Bots,Discord,我想问的是我说的return“https://www.google.com/#q=“+args[0]+”+“+args[1]+”+“+args[2]。显然,这可能不是编写搜索函数的最佳方式,但如何实现这一点的自动化,以便字符串[]args中的单词自动放入带有“+”的return语句中在每个单词之间,这样它将返回类似https://www.google.com/#q=please+使用数组帮助+我+回答+此+问题?。使用字符串和替换可以获得所需的结果 public String onGoogleC

我想问的是我说的
return“https://www.google.com/#q=“+args[0]+”+“+args[1]+”+“+args[2]。显然,这可能不是编写搜索函数的最佳方式,但如何实现这一点的自动化,以便字符串[]args中的单词自动放入带有“+”的return语句中在每个单词之间,这样它将返回类似
https://www.google.com/#q=please+使用
数组帮助+我+回答+此+问题

。使用字符串
替换
可以获得所需的结果

public String onGoogleCommand(String[] args) {
    if(args.length == 0){
        return "Type in a question after the google command!";
    }
    if(args.length >= 1){
        return "https://www.google.com/#q=" + args[0] + "+" + args[1] + "+" + args[2];
    }
    return "What?";
}
输出

String array[] = {"please", "help", "me"};
String output = "https://www.google.com/#q=" + Arrays.toString(array).
                    replace("[", "").
                    replace("]", "").
                    replace(", ", "+");
System.out.println(output);

您可以使用以下方法:

 https://www.google.com/#q=please+help+me

您可以迭代
args[]
数组并生成查询字符串:

public static String onGoogleCommand(String[] args) {
    if (args.length == 0) {
        return "Type in a question after the google command!";
    }
    if (args.length >= 1) {
        return "https://www.google.com/#q=" + join(args, "+");
    }
    return "What?";
}
公共字符串onGoogleCommand(字符串[]args){
if(args==null | | args.length==0){
return“在google命令后输入一个问题!”;
}
StringBuilder查询字符串=新建StringBuilder(“https://www.google.com/#q=");
append(args[0]);
对于(int i=1;i
您只需要使用foreach循环,类似这样的方法会有所帮助:

public String onGoogleCommand(String[] args) {
    if(args == null || args.length == 0) {
        return "Type in a question after the google command!";
    }
    StringBuilder queryString = new StringBuilder("https://www.google.com/#q=");
    queryString.append(args[0]);
    for (int i=1; i < args.length; ++i) {
        queryString.append("+").append(args[i]);
    }

    return queryString.toString();
}

使用此代码,您将在finalStr中进行搜索,只需将其值附加到URL中,因为您可以看到符号“+”添加在每个元素之后,我总是删除最后一个元素(“+”),因为它在字符串末尾是不必要的。

虽然已经有一个可接受的答案,但我给出了一些替代方案:

  • Java8字符串连接

    如果您使用的是Java 8,那么它已经提供了一个可以使用的连接方法:

    if(args.length >= 1){
        String finalStr="";
        for(String currentStr:args){
            finalStr+=currentStr+"+";
        }
        finalStr= finalStr.substring(0, finalStr.length()-1);
    }
    
    (如果您使用的是Java<8,那么仍然可以找到许多类似的util,比如Commons Lang)

  • 加入循环

    也不难为以下内容编写一个适当且简洁的循环:

    return "https://www.google.com/#q=" + String.join("+", args);
    
    还有另一种形式,正如评论中的某个人似乎不喜欢布尔标志:

    StringBuilder result = new StringBuilder("https://www.google.com/#q=");
    boolean first=true;
    for (String arg : args) {
        result.append(first? "" : "+").append(arg);
        first = false;
    }
    return result;
    

  • StringBuilder查询字符串=新的StringBuilder(“https://www.google.com/#q="); queryString.append(参数[0]
    ?@ScaryWombat帮助您在登录前喝杯咖啡:~p您不需要使用
    first
    标志。相反,您只需检查一次空的
    args
    列表,如果不是空的,则使用第一个参数为查询字符串设定种子。然后,通过添加加号(后跟术语)迭代后续参数。@TimBiegeleisen这也是一个可行的选择。这只是我个人的选择,因为我觉得它更简洁、更容易理解。如果您真的关心布尔标志,我提供了另一种形式。我宁愿使用与您不同的方式,因为我希望循环更容易理解,而不是要求通过“后续”循环elementsWell这实际上是一个效率问题;如果您不介意对每次迭代进行检查,那么您的解决方案就可以了。更大的问题是
    String\join()
    的源代码内部发生了什么。现在我很好奇Java如何处理它。@TimBiegeleisen,除非它显然会影响效率(例如,字符串concat与字符串生成器),我更愿意编写易于理解和维护的代码,而不是专注于这种过早的优化。请注意:如果您正在构建URL,请确保您有正确的转义特殊字符,通过使用URLEncode之类的东西。尽管它可以工作,但我有点担心每个代表创建的临时字符串我认为,这个小例子没有问题,但在处理更大或更频繁的案例时应该小心。这是正确的:)另一个问题是,如果任何字符串包含
    [
    ]
    ,则结果将被破坏。
    StringBuilder result = new StringBuilder("https://www.google.com/#q=");
    boolean first=true;
    for (String arg : args) {
        result.append(first? "" : "+").append(arg);
        first = false;
    }
    return result;
    
    StringBuilder result = new StringBuilder();
    for (String arg : args) {
        result.append(result.length() == 0 ? "https://www.google.com/#q=" : "+")
              .append(arg);
    }
    return result;