/*
* Copyright 2008-2011 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.nominanuda.lang;
import static java.util.Arrays.asList;
import static java.util.stream.Collectors.toList;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.text.MessageFormat;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Pattern;
import com.nominanuda.code.ThreadSafe;
@ThreadSafe
public abstract class Strings {
public static final Charset UTF8 = StandardCharsets.UTF_8;
public static final Charset ASCII = StandardCharsets.US_ASCII;
public static boolean nullOrEmpty(String s) {
return s == null || 0 == s.length();
}
public static boolean notNullOrEmpty(String s) {
return ! nullOrEmpty(s);
}
public static boolean nullOrBlank(String s) {
return s == null || "".equals(s.trim());
}
public static boolean notNullOrBlank(String s) {
return ! nullOrBlank(s);
}
public static String join(String separator, Object... strings) {
int len = strings.length;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++) {
sb.append(strings[i].toString());
if (i < len - 1) {
sb.append(separator);
}
}
return sb.toString();
}
public static String join(String separator, Iterable<?> collection) {
return join(separator, collection.iterator());
}
public static String join(String separator, Iterator<?> itr) {
StringBuilder sb = new StringBuilder();
while (itr.hasNext()) {
sb.append(itr.next().toString());
if (itr.hasNext()) {
sb.append(separator);
}
}
return sb.toString();
}
public static String joinNotNull(String separator, Object... strings) {
return join(separator, asList(strings).stream().filter(x -> x != null).collect(toList()));
}
public static String joinNotNullOrEmpty(String separator, Object... strings) {
return join(separator, asList(strings).stream().filter(x -> x != null && notNullOrEmpty(x.toString())).collect(toList()));
}
public static String joinNotNullOrBlank(String separator, Object... strings) {
return join(separator, asList(strings).stream().filter(x -> x != null && notNullOrBlank(x.toString())).collect(toList()));
}
public static List<String> splitAndTrim(String str, String regex) {
return splitAndTrim(str, Pattern.compile(regex));
}
public static List<String> splitAndTrim(String str, Pattern regex) {
String[] arr = regex.split(str);
LinkedList<String> l = new LinkedList<String>();
for(String s : arr) {
l.add(s.trim());
}
return l;
}
public static String pathConcat(String... segments) {
StringBuilder sb = new StringBuilder();
boolean lastEndsWithSlash = false;
boolean first = true;
for (String s : segments) {
if (first) {
sb.append(s);
first = false;
} else {
if ((! lastEndsWithSlash) && (! s.startsWith("/"))) {
sb.append("/");
sb.append(s);
} else if (lastEndsWithSlash && s.startsWith("/")) {
sb.append(s.substring(1));
} else {
sb.append(s);
}
}
lastEndsWithSlash = s.endsWith("/");
}
return sb.toString();
}
public static String F(String pattern, Object... arguments) {
for(int i = 0; i < arguments.length; i++) {
if(null == arguments[i]) {
throw new NullPointerException("arguments " + i + " is null");
} else {
arguments[i] = arguments[i].toString();
}
}
return MessageFormat.format(pattern, arguments);
}
public static <T> String J(String separator, Iterable<T> someT) {
return join(separator, someT);
}
public static String J(String separator, String decorator, List<String> strings) {
StringBuilder result = new StringBuilder();
for (String string : strings) {
result.append(decorator);
result.append(string);
result.append(decorator);
result.append(separator);
}
return result.toString().replaceAll(separator.concat("$"), "");
}
public static String J(String separator, String... strings) {
StringBuilder result = new StringBuilder();
for (String string : strings) {
result.append(string);
result.append(separator);
}
return result.toString().replaceAll(separator.concat("$"), "");
}
}