blob: ffbc9df16bd5dedeadc0bcaae3be172d7a85513e [file] [log] [blame]
/*
* Copyright (c) 2011 Google Inc.
*
* All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
* Public License v1.0 which accompanies this distribution, and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*/
package com.google.eclipse.protobuf.util;
import static org.eclipse.xtext.util.Strings.isEmpty;
import java.util.Scanner;
import com.google.common.base.Function;
/**
* Utility methods related to {@code String}.s
*
* @author alruiz@google.com (Alex Ruiz)
*/
public final class Strings {
/**
* Returns a {@code String} containing the given one in double quotes.
* @param s the given {@code String}, may be {@code null}.
* @return a {@code String} containing the given one in double quotes, or {@code null} if the given {@code String} is
* {@code null}.
*/
public static String quote(String s) {
if (s == null) {
return s;
}
return "\"" + s + "\"";
}
/**
* Removes surrounding quotes from the given {@code String}.
* @param s the given {@code String}, may be {@code null}.
* @return a {@code String} containing the given one without surrounding quotes, or {@code null} if the given
* {@code String} is {@code null}.
*/
public static String unquote(String s) {
if (!isQuoted(s)) {
return s;
}
return s.substring(1, s.length() - 1);
}
private static boolean isQuoted(String s) {
if (isEmpty(s)) {
return false;
}
return (s.startsWith("\"") && s.endsWith("\"")) || (s.startsWith("'") && s.endsWith("'"));
}
/**
* Returns a {@code String} containing the given one without line breaks.
* @param s the given {@code String}, may be {@code null}.
* @return a {@code String} containing the given one without line breaks, or {@code null} if the given {@code String}
* is {@code null}.
*/
public static String removeLineBreaksFrom(String s) {
return removeLineBreaks(s, null);
}
/**
* Returns a {@code String} containing the given one without line breaks.
* @param s the given {@code String}, may be {@code null}.
* @param transformation any modifications to apply to each line in the given {@code String}, may be {@code null}.
* @return a {@code String} containing the given one without line breaks, or {@code null} if the given {@code String}
* is {@code null}.
*/
public static String removeLineBreaks(String s, Function<String, String> transformation) {
if (isEmpty(s)) {
return s;
}
StringBuilder valueBuilder = new StringBuilder();
Scanner scanner = new Scanner(s);
while (scanner.hasNextLine()) {
String line = scanner.nextLine().trim();
if (transformation != null) {
line = transformation.apply(line);
}
valueBuilder.append(line);
}
scanner.close();
return valueBuilder.toString();
}
private Strings() {}
}