Applying Robert Scholte's patch from LANG-422, adding a appendSeparator with an alternative default separator if the StrBuilder is currently empty
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@826969 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
dbf4cd5f42
commit
13a0cc63cd
|
@ -68,6 +68,7 @@ import org.apache.commons.lang.SystemUtils;
|
||||||
* the interface.
|
* the interface.
|
||||||
*
|
*
|
||||||
* @author Stephen Colebourne
|
* @author Stephen Colebourne
|
||||||
|
* @author Robert Scholte
|
||||||
* @since 2.2
|
* @since 2.2
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
|
@ -1096,8 +1097,40 @@ public class StrBuilder implements CharSequence, Appendable {
|
||||||
* @since 2.3
|
* @since 2.3
|
||||||
*/
|
*/
|
||||||
public StrBuilder appendSeparator(String separator) {
|
public StrBuilder appendSeparator(String separator) {
|
||||||
if (separator != null && size() > 0) {
|
return appendSeparator(separator, null);
|
||||||
append(separator);
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends one of both separators to the StrBuilder.
|
||||||
|
* If the builder is currently empty it will append the defaultIfEmpty-separator
|
||||||
|
* Otherwise it will append the standard-separator
|
||||||
|
*
|
||||||
|
* Appending a null separator will have no effect.
|
||||||
|
* The separator is appended using {@link #append(String)}.
|
||||||
|
* <p>
|
||||||
|
* This method is for example useful for constructing queries
|
||||||
|
* <pre>
|
||||||
|
* StrBuilder whereClause = new StrBuilder();
|
||||||
|
* if(searchCommand.getPriority() != null) {
|
||||||
|
* whereClause.appendSeparator(" and", " where");
|
||||||
|
* whereClause.append(" priority = ?")
|
||||||
|
* }
|
||||||
|
* if(searchCommand.getComponent() != null) {
|
||||||
|
* whereClause.appendSeparator(" and", " where");
|
||||||
|
* whereClause.append(" component = ?")
|
||||||
|
* }
|
||||||
|
* selectClause.append(whereClause)
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param standard the separator if builder is not empty, null means no separator
|
||||||
|
* @param defaultIfEmpty the separator if builder is empty, null means no separator
|
||||||
|
* @return this, to enable chaining
|
||||||
|
* @since 3.0
|
||||||
|
*/
|
||||||
|
public StrBuilder appendSeparator(String standard, String defaultIfEmpty) {
|
||||||
|
String str = isEmpty() ? defaultIfEmpty : standard;
|
||||||
|
if (str != null) {
|
||||||
|
append(str);
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -1128,6 +1161,26 @@ public class StrBuilder implements CharSequence, Appendable {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Append one of both separators to the builder
|
||||||
|
* If the builder is currently empty it will append the defaultIfEmpty-separator
|
||||||
|
* Otherwise it will append the standard-separator
|
||||||
|
*
|
||||||
|
* The separator is appended using {@link #append(char)}.
|
||||||
|
* @param standard the separator if builder is not empty
|
||||||
|
* @param defaultIfEmpty the separator if builder is empty
|
||||||
|
* @return this, to enable chaining
|
||||||
|
* @since 3.0
|
||||||
|
*/
|
||||||
|
public StrBuilder appendSeparator(char standard, char defaultIfEmpty) {
|
||||||
|
if (size() > 0) {
|
||||||
|
append(standard);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
append(defaultIfEmpty);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Appends a separator to the builder if the loop index is greater than zero.
|
* Appends a separator to the builder if the loop index is greater than zero.
|
||||||
* Appending a null separator will have no effect.
|
* Appending a null separator will have no effect.
|
||||||
|
|
|
@ -994,6 +994,28 @@ public class StrBuilderAppendInsertTest extends TestCase {
|
||||||
assertEquals("foo,", sb.toString());
|
assertEquals("foo,", sb.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
public void testAppendSeparator_String_String() {
|
||||||
|
StrBuilder sb = new StrBuilder();
|
||||||
|
final String startSeparator = "order by ";
|
||||||
|
final String standardSeparator = ",";
|
||||||
|
final String foo = "foo";
|
||||||
|
sb.appendSeparator(null, null);
|
||||||
|
assertEquals("", sb.toString());
|
||||||
|
sb.appendSeparator(standardSeparator, null);
|
||||||
|
assertEquals("", sb.toString());
|
||||||
|
sb.appendSeparator(standardSeparator, startSeparator);
|
||||||
|
assertEquals(startSeparator, sb.toString());
|
||||||
|
sb.appendSeparator(null, null);
|
||||||
|
assertEquals(startSeparator, sb.toString());
|
||||||
|
sb.appendSeparator(null, startSeparator);
|
||||||
|
assertEquals(startSeparator, sb.toString());
|
||||||
|
sb.append(foo);
|
||||||
|
assertEquals(startSeparator + foo, sb.toString());
|
||||||
|
sb.appendSeparator(standardSeparator, startSeparator);
|
||||||
|
assertEquals(startSeparator + foo + standardSeparator, sb.toString());
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
public void testAppendSeparator_char() {
|
public void testAppendSeparator_char() {
|
||||||
StrBuilder sb = new StrBuilder();
|
StrBuilder sb = new StrBuilder();
|
||||||
|
@ -1004,6 +1026,18 @@ public class StrBuilderAppendInsertTest extends TestCase {
|
||||||
sb.appendSeparator(',');
|
sb.appendSeparator(',');
|
||||||
assertEquals("foo,", sb.toString());
|
assertEquals("foo,", sb.toString());
|
||||||
}
|
}
|
||||||
|
public void testAppendSeparator_char_char() {
|
||||||
|
StrBuilder sb = new StrBuilder();
|
||||||
|
final char startSeparator = ':';
|
||||||
|
final char standardSeparator = ',';
|
||||||
|
final String foo = "foo";
|
||||||
|
sb.appendSeparator(standardSeparator, startSeparator); // no effect
|
||||||
|
assertEquals(String.valueOf(startSeparator), sb.toString());
|
||||||
|
sb.append(foo);
|
||||||
|
assertEquals(String.valueOf(startSeparator) + foo, sb.toString());
|
||||||
|
sb.appendSeparator(standardSeparator, startSeparator);
|
||||||
|
assertEquals(String.valueOf(startSeparator) + foo + standardSeparator, sb.toString());
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
public void testAppendSeparator_String_int() {
|
public void testAppendSeparator_String_int() {
|
||||||
|
@ -1356,5 +1390,4 @@ public class StrBuilderAppendInsertTest extends TestCase {
|
||||||
sb.insert(0, (char[]) null, 0, 0);
|
sb.insert(0, (char[]) null, 0, 0);
|
||||||
assertEquals("nullnullfoonullbarbaz", sb.toString());
|
assertEquals("nullnullfoonullbarbaz", sb.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue