我想在数组中的每个字符串之间附加单词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)
我做错了什么?
答案 0 :(得分:7)
在"("
循环之前附加for
,以便只打印一次。同样,在")"
循环后附加for
,以便只打印一次。最后,您可以循环遍历整个myString
数组,仅添加该元素,而不是一次仅添加两个元素,并且只在需要时附加" AND "
。
答案 1 :(得分: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
的情况。如果没有元素,则跳过最后一次添加并关闭&#34;)&#34;已添加。
答案 2 :(得分:3)
你应该将你想要的部分分开给你一个这样的循环。所以你想要(和)一次,只有一个词,你不需要和在它面前。
public void addString(String[] myString)
{
StringBuilder sb = new StringBuilder();
sb.append("("+myString[0]);
for(int i = 1; i < myString.length;i++)
{
sb.append(" AND " + myString[i]);
}
sb.append(")")
System.out.println(sb);
}
答案 3 :(得分:2)
要做你想做的事情,我可能会在StringUtils中使用join
方法。
来自文档:
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 :(得分:1)
您可以执行以下操作 -
Arrays.asList(myString).toString().replaceAll(",", " AND").replace("[", "(").replace("]", ")")
Arrays.asList(myString)
将array
转换为List
。toString()
将其转换为类似[ele1, ele2, ele
3]
的字符串。 replaceAll
和replace
方法给出了
适当的输出。第二个选项是使用join
提供的StringUtils
方法。
答案 5 :(得分:1)
当您想要在元素之间使用分隔符时,最常使用的方法是先添加分隔符,然后再添加字符串。仅在第一个元素之前跳过分隔符。
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()
,这会导致我在这里看到的大多数其他解决方案崩溃
()
可以将第一个元素移出循环,这样循环就不必检查它是否需要省略分隔符(最小的性能增益),但这会导致IMO代码不太可读。 E.g:
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]);
}
}
答案 6 :(得分:0)
在parenthesis
之前和之后附加For Loop
。
一次仅在element
中附加一个String
。
删除String
之后For Loop
末尾的最后“与”。
public void addString(String... myString) {
StringBuilder sb = new StringBuilder();
sb.append("(");
for(int i = 0; i < myString.length;) {
sb.append(myString[i] + " AND ");
i++;
}
sb = sb.substring(0, sb.length() - 5);
sb.append(")");
System.out.println(sb);
}
答案 7 :(得分:0)
获取Apache CommonsLang包http://commons.apache.org/proper/commons-lang/
然后使用其StringUtils join()方法,如下所述:http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html
System.out.println(StringUtils.join(myString, ' AND '));
答案 8 :(得分:-1)
更正后的代码:
public void addString(String... myString) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < myString.length; i++) {
if(i = 0){
sb.append("(" + myString[i])
}else if (i = myString.length-1){
sb.append(myString[i] + ")");
}else{
sb.append(myString[i])
}
sb.append("(" + myString[i] + " AND " + myString[i+1] + ")");
}
System.out.println(sb);
}
编辑:这是基于上述答案之一的更好版本:
public void addString(String[] myString)
{
StringBuilder sb = new StringBuilder();
sb.append("(");
for(int i = 0; i < myString.length; i++){
sb.append(myString[i] + " AND ");
}
sb.append(")")
System.out.println(sb);
}
答案 9 :(得分:-1)
试试这个:
public void addString(string[] myString) {
StringBuilder sb = new StringBuilder();
sb.Append("(");
for(int i = 0; i < myString.length; i++) {
sb.Append(myString[i] + " AND ");
}
string result = sb.ToString().Substring(0, sb.ToString().LastIndexOf("AND"));
result += ")";
System.out.println(result);
}