/* * Copyright (C) 2015 SoftIndex LLC. * * 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 io.datakernel.util; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import static io.datakernel.util.Preconditions.checkNotNull; public final class StringUtils { private StringUtils() {} public static String join(String separator, Iterable<?> inputs) { checkNotNull(separator); checkNotNull(inputs); StringBuilder stringBuilder = new StringBuilder(); Iterator<?> iterator = inputs.iterator(); if (iterator.hasNext()) { Object firstElement = checkNotNull(iterator.next(), "Elements cannot be null"); String firstString = checkNotNull(firstElement.toString(), "element.toString() cannot be null"); stringBuilder.append(firstString); } else { return ""; } while (iterator.hasNext()) { Object currentElement = checkNotNull(iterator.next(), "Elements cannot be null"); String currentString = checkNotNull(currentElement.toString(), "element.toString() cannot be null"); stringBuilder.append(separator); stringBuilder.append(currentString); } return stringBuilder.toString(); } public static String join(String separator, Object[] inputs) { return join(separator, Arrays.asList(inputs)); } public static String join(char separator, Iterable<?> inputs) { return join(Character.toString(separator), inputs); } public static String join(char separator, Object[] inputs) { return join(Character.toString(separator), inputs); } public static List<String> splitToList(CharSequence separators, String input) { List<String> substrings = new ArrayList<>(); int currentSubstringBeginningIndex = -1; // -1 means that we are looking for substring beginning now for (int currentIndex = 0; currentIndex < input.length(); currentIndex++) { boolean isCurrentCharSeparator = charSequenceContainsChar(separators, input.charAt(currentIndex)); if (currentSubstringBeginningIndex == -1 && !isCurrentCharSeparator) { currentSubstringBeginningIndex = currentIndex; } else if (currentSubstringBeginningIndex != -1 && isCurrentCharSeparator) { substrings.add(input.substring(currentSubstringBeginningIndex, currentIndex)); currentSubstringBeginningIndex = -1; } else { // skip } } // add last substring if (currentSubstringBeginningIndex != -1) { substrings.add(input.substring(currentSubstringBeginningIndex, input.length())); } return substrings; } private static boolean charSequenceContainsChar(CharSequence sequence, char c) { for (int i = 0; i < sequence.length(); i++) { if (sequence.charAt(i) == c) { return true; } } return false; } public static List<String> splitToList(char separator, String input) { return splitToList(Character.toString(separator), input); } public static String[] split(CharSequence separators, String input) { List<String> output = splitToList(separators, input); return output.toArray(new String[output.size()]); } public static String[] split(char separator, String input) { return split(Character.toString(separator), input); } }