teichmann@5844: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5844: * Software engineering by Intevation GmbH teichmann@5844: * teichmann@5992: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5844: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5992: * documentation coming with Dive4Elements River for details. teichmann@5844: */ teichmann@5844: teichmann@5829: package org.dive4elements.river.utils; sascha@199: sascha@199: import java.util.Arrays; sascha@199: import java.util.ArrayList; sascha@199: import java.util.Locale; sascha@199: sascha@199: import java.net.URLEncoder; sascha@199: import java.net.URLDecoder; sascha@199: sascha@199: import java.io.UnsupportedEncodingException; sascha@199: import java.io.IOException; sascha@199: import java.io.BufferedReader; sascha@199: import java.io.StringReader; sascha@199: import java.io.StringWriter; sascha@199: import java.io.PrintWriter; sascha@199: felix@2343: sascha@199: public final class StringUtil { sascha@199: final static String NUMBER_SEPERATOR = ";"; sascha@199: final static String LINE_SEPERATOR = ":"; sascha@199: sascha@199: private StringUtil() { sascha@199: } sascha@199: sascha@199: public static final String double2DArrayToString(double[][] values) { sascha@199: sascha@199: if (values == null) { sascha@199: throw new IllegalArgumentException("keine double[][]-Werte"); sascha@199: } sascha@199: sascha@199: StringBuilder strbuf = new StringBuilder(); sascha@199: sascha@199: for (int i=0; i < values.length; i++) { sascha@199: if (i>0) { sascha@199: strbuf.append(LINE_SEPERATOR); sascha@199: } sascha@199: for (int j=0; j < values[i].length; j++) { sascha@199: if (j > 0) { sascha@199: strbuf.append(NUMBER_SEPERATOR); sascha@199: } sascha@199: strbuf.append(values[i][j]); sascha@199: } sascha@199: } sascha@199: sascha@199: return strbuf.toString(); sascha@199: } sascha@199: sascha@199: public static final double[][] stringToDouble2DArray(String str) { sascha@199: if (str == null || str.length() == 0) { sascha@199: return null; sascha@199: } sascha@199: sascha@199: String[] lineSplit = str.split(LINE_SEPERATOR); sascha@199: double[][] array2D = new double[lineSplit.length][]; sascha@199: for (int i=0; i < lineSplit.length; i++) { sascha@199: String[] numberSplit = lineSplit[i].split(NUMBER_SEPERATOR); sascha@199: sascha@199: double[] numbers = new double[numberSplit.length]; sascha@199: for (int j=0; j < numberSplit.length; j++) { sascha@199: numbers[j] = Double.valueOf(numberSplit[j]).doubleValue(); sascha@199: } sascha@199: sascha@199: array2D[i] = numbers; sascha@199: } sascha@199: sascha@199: return array2D; sascha@199: } sascha@199: felix@2343: /** felix@2343: * Remove first occurrence of "[" and "]" (if both do occur). felix@2343: * @param value String to be stripped of [] (might be null). felix@2343: * @return input string but with [ and ] removed, or input string if no felix@2343: * brackets were found. felix@2343: */ felix@2343: public static final String unbracket(String value) { felix@2343: // null- guard felix@2343: if (value == null) return value; felix@2343: felix@2343: int start = value.indexOf("["); felix@2343: int end = value.indexOf("]"); felix@2343: felix@2343: if (start < 0 || end < 0) { felix@2343: return value; felix@2343: } felix@2343: felix@2343: value = value.substring(start + 1, end); felix@2343: felix@2343: return value; felix@2343: } felix@2343: felix@2343: felix@2344: /** felix@2344: * From "Q=1" make "W(Q=1)". felix@2344: * @return original string wraped in "W()" if it contains a "Q", original felix@2344: * string otherwise. felix@2344: */ felix@2344: public static String wWrap(String wOrQ) { felix@2344: return (wOrQ != null && wOrQ.indexOf("Q") >=0) felix@2344: ? "W(" + wOrQ + ")" felix@2344: : wOrQ; felix@2344: } felix@2344: felix@2344: sascha@199: public static final String [] splitLines(String s) { sascha@199: if (s == null) { sascha@199: return null; sascha@199: } sascha@199: ArrayList list = new ArrayList(); sascha@199: sascha@199: BufferedReader in = null; sascha@199: sascha@199: try { sascha@199: in = sascha@199: new BufferedReader( sascha@199: new StringReader(s)); sascha@199: sascha@199: String line; sascha@199: sascha@199: while ((line = in.readLine()) != null) { sascha@199: list.add(line); sascha@199: } sascha@199: } sascha@199: catch (IOException ioe) { sascha@199: return null; sascha@199: } sascha@199: finally { sascha@199: if (in != null) sascha@199: try { sascha@199: in.close(); sascha@199: } sascha@199: catch (IOException ioe) {} sascha@199: } sascha@199: sascha@199: return list.toArray(new String[list.size()]); sascha@199: } sascha@199: sascha@199: public static final String concat(String [] s) { sascha@199: return concat(s, null); sascha@199: } sascha@199: sascha@199: public static final String concat(String [] s, String glue) { sascha@199: if (s == null) { sascha@199: return null; sascha@199: } sascha@199: StringBuilder sb = new StringBuilder(); sascha@199: for (int i = 0; i < s.length; ++i) { sascha@199: if (i > 0 && glue != null) { sascha@199: sb.append(glue); sascha@199: } sascha@199: sb.append(s[i]); sascha@199: } sascha@199: return sb.toString(); sascha@199: } sascha@199: sascha@199: public static final String [] splitAfter(String [] src, int N) { sascha@199: if (src == null) { sascha@199: return null; sascha@199: } sascha@199: sascha@199: ArrayList list = new ArrayList(src.length); sascha@199: for (int i = 0; i < src.length; ++i) { sascha@199: String s = src[i]; sascha@199: int R; sascha@199: if (s == null || (R = s.length()) == 0) { sascha@199: list.add(s); sascha@199: } sascha@199: else { sascha@199: while (R > N) { sascha@199: list.add(s.substring(0, N)); sascha@199: s = s.substring(N); sascha@199: R = s.length(); sascha@199: } sascha@199: list.add(s); sascha@199: } sascha@199: } sascha@199: return list.toArray(new String[list.size()]); sascha@199: } sascha@199: sascha@199: public static final String [] splitQuoted(String s) { sascha@199: return splitQuoted(s, '"'); sascha@199: } sascha@199: sascha@199: public static final String[] fitArray(String [] src, String [] dst) { sascha@199: if (src == null) { sascha@199: return dst; sascha@199: } sascha@199: if (dst == null) { sascha@199: return src; sascha@199: } sascha@199: sascha@199: if (src.length == dst.length) { sascha@199: return src; sascha@199: } sascha@199: sascha@199: System.arraycopy(src, 0, dst, 0, Math.min(dst.length, src.length)); sascha@199: sascha@199: return dst; sascha@199: } sascha@199: sascha@199: public static final String [] splitQuoted(String s, char quoteChar) { sascha@199: if (s == null) { sascha@199: return null; sascha@199: } sascha@199: ArrayList l = new ArrayList(); sascha@199: int mode = 0, last_mode = 0; sascha@199: StringBuilder sb = new StringBuilder(); sascha@199: for (int N = s.length(), i = 0; i < N; ++i) { sascha@199: char c = s.charAt(i); sascha@199: switch (mode) { sascha@199: case 0: // unquoted mode sascha@199: if (c == quoteChar) { sascha@199: mode = 1; // to quoted mode sascha@199: if (sb.length() > 0) { sascha@199: l.add(sb.toString()); sascha@199: sb.setLength(0); sascha@199: } sascha@199: } sascha@199: else if (c == '\\') { sascha@199: last_mode = 0; sascha@199: mode = 2; // escape mode sascha@199: } sascha@199: else if (!Character.isWhitespace(c)) { sascha@199: sb.append(c); sascha@199: } sascha@199: else if (sb.length() > 0) { sascha@199: l.add(sb.toString()); sascha@199: sb.setLength(0); sascha@199: } sascha@199: break; sascha@199: case 1: // quote mode sascha@199: if (c == '\\') { sascha@199: last_mode = 1; sascha@199: mode = 2; // escape mode sascha@199: } sascha@199: else if (c == quoteChar) { // leave quote mode sascha@199: l.add(sb.toString()); sascha@199: sb.setLength(0); sascha@199: mode = 0; // to unquoted mode sascha@199: } sascha@199: else { sascha@199: sb.append(c); sascha@199: } sascha@199: break; sascha@199: case 2: // escape mode sascha@199: sb.append(c); sascha@199: mode = last_mode; sascha@199: break; sascha@199: } sascha@199: } sascha@199: if (sb.length() > 0) { sascha@199: l.add(sb.toString()); sascha@199: } sascha@199: return l.toArray(new String[l.size()]); sascha@199: } sascha@199: sascha@199: public static final String [] splitUnique(String s) { sascha@199: return splitUnique(s, "[\\s,]+"); sascha@199: } sascha@199: sascha@199: public static final String [] splitUnique(String s, String sep) { sascha@199: return s != null ? unique(s.split(sep)) : null; sascha@199: } sascha@199: sascha@199: public static final String [] unique(String [] str) { sascha@199: if (str == null || str.length == 1) { sascha@199: return str; sascha@199: } sascha@199: sascha@199: Arrays.sort(str); sascha@199: sascha@199: for (int i = 1; i < str.length; ++i) sascha@199: if (str[i].equals(str[i-1])) { sascha@199: ArrayList list = new ArrayList(str.length); sascha@199: sascha@199: for (int j = 0; j < i; ++j) { sascha@199: list.add(str[j]); sascha@199: } sascha@199: sascha@199: String last = str[i]; sascha@199: sascha@199: for (++i; i < str.length; ++i) sascha@199: if (!last.equals(str[i])) { sascha@199: list.add(last = str[i]); sascha@199: } sascha@199: sascha@199: return list.toArray(new String[list.size()]); sascha@199: } sascha@199: sascha@199: return str; sascha@199: } sascha@199: sascha@199: public static final String [] ensureEmptyExistence(String [] str) { sascha@199: if (str == null) { sascha@199: return null; sascha@199: } sascha@199: sascha@199: for (int i = 0; i < str.length; ++i) sascha@199: if (str[i].length() == 0) { sascha@199: if (i != 0) { // copy to front sascha@199: String t = str[0]; sascha@199: str[0] = str[i]; sascha@199: str[i] = t; sascha@199: } sascha@199: return str; sascha@199: } sascha@199: sascha@199: String [] n = new String[str.length+1]; sascha@199: n[0] = ""; sascha@199: System.arraycopy(str, 0, n, 1, str.length); sascha@199: return n; sascha@199: } sascha@199: sascha@199: public static final String ensureWidthPadLeft(String s, int width, char pad) { sascha@199: int N = s.length(); sascha@199: if (N >= width) { sascha@199: return s; sascha@199: } sascha@199: StringBuilder sb = new StringBuilder(width); sascha@199: for (; N < width; ++N) { sascha@199: sb.append(pad); sascha@199: } sascha@199: sb.append(s); sascha@199: return sb.toString(); sascha@199: } sascha@199: sascha@199: public static final String [] splitWhiteSpaceWithNAsPad( sascha@199: String s, sascha@199: int N, sascha@199: String pad sascha@199: ) { sascha@199: if (s == null) { sascha@199: return null; sascha@199: } sascha@199: sascha@199: boolean copyChars = true; sascha@199: int count = 0; // number of WS sascha@199: sascha@199: int S = s.length(); sascha@199: sascha@199: ArrayList parts = new ArrayList(); sascha@199: sascha@199: StringBuilder part = new StringBuilder(S); sascha@199: sascha@199: for (int i = 0; i < S; ++i) { sascha@199: char c = s.charAt(i); sascha@199: if (copyChars) { // char mode sascha@199: if (Character.isWhitespace(c)) { sascha@199: if (part.length() > 0) { sascha@199: parts.add(part.toString()); sascha@199: part.setLength(0); sascha@199: } sascha@199: count = 1; sascha@199: copyChars = false; // to WS mode sascha@199: } sascha@199: else { sascha@199: part.append(c); sascha@199: } sascha@199: } sascha@199: else { // counting WS sascha@199: if (Character.isWhitespace(c)) { sascha@199: ++count; sascha@199: } sascha@199: else { sascha@199: while (count >= N) {// enough to insert pad? sascha@199: parts.add(pad); sascha@199: count -= N; sascha@199: } sascha@199: part.append(c); sascha@199: count = 0; sascha@199: copyChars = true; // back to char mode sascha@199: } sascha@199: } sascha@199: } // for all chars sascha@199: sascha@199: if (copyChars) { sascha@199: if (part.length() > 0) { sascha@199: parts.add(part.toString()); sascha@199: } sascha@199: } sascha@199: else { sascha@199: while (count >= N) { // enough to insert pad? sascha@199: parts.add(pad); sascha@199: count -= N; sascha@199: } sascha@199: } sascha@199: sascha@199: return parts.toArray(new String[parts.size()]); sascha@199: } sascha@199: sascha@199: public static final String encodeURL(String url) { sascha@199: try { sascha@199: return url != null sascha@199: ? URLEncoder.encode(url, "UTF-8") sascha@199: : ""; sascha@199: } sascha@199: catch (UnsupportedEncodingException usee) { sascha@199: throw new RuntimeException(usee.getLocalizedMessage()); sascha@199: } sascha@199: } sascha@199: sascha@199: public static final String decodeURL(String url) { sascha@199: try { sascha@199: return url != null sascha@199: ? URLDecoder.decode(url, "UTF-8") sascha@199: : ""; sascha@199: } sascha@199: catch (UnsupportedEncodingException usee) { sascha@199: throw new RuntimeException(usee.getLocalizedMessage()); sascha@199: } sascha@199: } sascha@199: sascha@199: public static final boolean isEmpty(String s) { sascha@199: return s == null || s.length() == 0; sascha@199: } sascha@199: sascha@199: public static final String empty(String s) { sascha@199: return s == null ? "" : s; sascha@199: } sascha@199: sascha@199: sascha@199: public static final String trim(String s) { sascha@199: return s != null ? s.trim() : null; sascha@199: } sascha@199: sascha@199: public static final String uniqueWhitespaces(String s) { sascha@199: if (s == null) { sascha@199: return null; sascha@199: } sascha@199: sascha@199: boolean wasWS = false; sascha@199: StringBuilder sb = new StringBuilder(); sascha@199: sascha@199: for (int N = s.length(), i = 0; i < N; ++i) { sascha@199: char c = s.charAt(i); sascha@199: if (Character.isWhitespace(c)) { sascha@199: if (!wasWS) { sascha@199: sb.append(c); sascha@199: wasWS = true; sascha@199: } sascha@199: } sascha@199: else { sascha@199: sb.append(c); sascha@199: wasWS = false; sascha@199: } sascha@199: } sascha@199: sascha@199: return sb.toString(); sascha@199: } sascha@199: sascha@199: public static final String replaceNewlines(String s) { sascha@199: return s == null sascha@199: ? null sascha@199: : s.replace('\r', ' ').replace('\n', ' '); sascha@199: } sascha@199: sascha@199: /* sascha@199: public static final String quoteReplacement(String s) { sascha@199: sascha@199: if (s == null || (s.indexOf('\\') == -1 && s.indexOf('$') == -1)) sascha@199: return s; sascha@199: sascha@199: StringBuilder sb = new StringBuilder(); sascha@199: sascha@199: for (int N = s.length(), i = 0; i < N; ++i) { sascha@199: char c = s.charAt(i); sascha@199: if (c == '\\' || c == '$') sb.append('\\'); sascha@199: sb.append(c); sascha@199: } sascha@199: sascha@199: return sb.toString(); sascha@199: } sascha@199: */ sascha@199: sascha@199: public static final String quoteReplacement(String s) { sascha@199: sascha@199: if (s == null) { sascha@199: return null; sascha@199: } sascha@199: sascha@199: for (int N = s.length(), i = 0; i < N; ++i) { // plain check loop sascha@199: char c = s.charAt(i); sascha@199: if (c == '$' || c == '\\') { // first special -> StringBuilder sascha@199: StringBuilder sb = new StringBuilder(s.substring(0, i)) sascha@199: .append('\\') sascha@199: .append(c); sascha@199: for (++i; i < N; ++i) { // build StringBuilder with rest sascha@199: if ((c = s.charAt(i)) == '$' || c == '\\') { sascha@199: sb.append('\\'); sascha@199: } sascha@199: sb.append(c); sascha@199: } sascha@199: return sb.toString(); sascha@199: } sascha@199: } sascha@199: sascha@199: return s; sascha@199: } sascha@199: sascha@199: public static final String repeat(String what, int times) { sascha@199: return repeat(what, times, new StringBuilder()).toString(); sascha@199: } sascha@199: sascha@199: public static final StringBuilder repeat(String what, int times, StringBuilder sb) { sascha@199: while (times-- > 0) { sascha@199: sb.append(what); sascha@199: } sascha@199: return sb; sascha@199: } sascha@199: sascha@199: /** sascha@3792: * Returns the file name without extension. sascha@199: */ sascha@199: public static final String cutExtension(String s) { sascha@199: if (s == null) { sascha@199: return null; sascha@199: } sascha@199: int dot = s.lastIndexOf('.'); sascha@199: return dot >= 0 sascha@199: ? s.substring(0, dot) sascha@199: : s; sascha@199: } sascha@199: sascha@199: public static final String extension(String s) { sascha@199: if (s == null) { sascha@199: return null; sascha@199: } sascha@199: int dot = s.lastIndexOf('.'); sascha@199: return dot >= 0 sascha@199: ? s.substring(dot+1) sascha@199: : s; sascha@199: } sascha@199: sascha@199: public static final String [] splitExtension(String x) { sascha@199: if (x == null) { sascha@199: return null; sascha@199: } sascha@199: int i = x.lastIndexOf('.'); sascha@199: return i < 0 sascha@199: ? new String[] { x, null } sascha@199: : new String[] { x.substring(0, Math.max(0, i)), x.substring(i+1).toLowerCase() }; sascha@199: } sascha@199: sascha@199: public static String entityEncode(String s) { sascha@199: if (s == null || s.length() == 0) { sascha@199: return s; sascha@199: } sascha@199: sascha@199: StringBuilder sb = new StringBuilder(); sascha@199: for (int i=0, N =s.length(); i < N; i++) { sascha@199: char c = s.charAt(i); sascha@199: switch (c) { sascha@199: case '<': sascha@199: sb.append("<"); sascha@199: break; sascha@199: case '>': sascha@199: sb.append(">"); sascha@199: break; sascha@199: case '&': sascha@199: sb.append("&"); sascha@199: break; sascha@199: default: sascha@199: sb.append(c); sascha@199: } sascha@199: } sascha@199: return sb.toString(); sascha@199: } sascha@199: sascha@199: public static String entityDecode(String s) { sascha@199: if (s == null || s.length() == 0) { sascha@199: return s; sascha@199: } sascha@199: sascha@199: boolean amp = false; sascha@199: StringBuilder sb = new StringBuilder(); sascha@199: StringBuilder ampbuf = new StringBuilder(); sascha@199: for (int i=0, N =s.length(); i < N; i++) { sascha@199: char c = s.charAt(i); sascha@199: if (amp) { sascha@199: if (c == ';') { sascha@199: amp = false; sascha@199: String str = ampbuf.toString(); sascha@199: ampbuf.setLength(0); sascha@199: if (str.equals("lt")) { sascha@199: sb.append('<'); sascha@199: } sascha@199: else if (str.equals("gt")) { sascha@199: sb.append('>'); sascha@199: } sascha@199: else if (str.equals("amp")) { sascha@199: sb.append('&'); sascha@199: } sascha@199: else { sascha@199: sb.append('&').append(str).append(';'); sascha@199: } sascha@199: } sascha@199: else { sascha@199: ampbuf.append(c); sascha@199: } sascha@199: } sascha@199: else if (c=='&') { sascha@199: amp = true; sascha@199: } sascha@199: else { sascha@199: sb.append(c); sascha@199: } sascha@199: sascha@199: } sascha@199: return sb.toString(); sascha@199: } sascha@199: sascha@199: public static final String quote(String s) { sascha@199: return quote(s, '"'); sascha@199: } sascha@199: sascha@199: public static final String quote(String s, char quoteChar) { sascha@199: if (s == null) { sascha@199: return null; sascha@199: } sascha@199: sascha@199: int N = s.length(); sascha@199: sascha@199: if (N == 0) sascha@199: return new StringBuilder(2) sascha@199: .append(quoteChar) sascha@199: .append(quoteChar) sascha@199: .toString(); sascha@199: sascha@199: StringBuilder sb = null; sascha@199: sascha@199: int i = 0; sascha@199: sascha@199: for (; i < N; ++i) { sascha@199: char c = s.charAt(i); sascha@199: sascha@199: if (Character.isWhitespace(c)) { sascha@199: sb = new StringBuilder() sascha@199: .append(quoteChar) sascha@199: .append(s.substring(0, i+1)); sascha@199: break; sascha@199: } sascha@199: else if (c == quoteChar) { sascha@199: sb = new StringBuilder() sascha@199: .append(quoteChar) sascha@199: .append(s.substring(0, i)) sascha@199: .append('\\') sascha@199: .append(quoteChar); sascha@199: break; sascha@199: } sascha@199: } sascha@199: sascha@199: if (sb == null) { sascha@199: return s; sascha@199: } sascha@199: sascha@199: for (++i; i < N; ++i) { sascha@199: char c = s.charAt(i); sascha@199: if (c == quoteChar || c == '\\') { sascha@199: sb.append('\\'); sascha@199: } sascha@199: sascha@199: sb.append(c); sascha@199: } sascha@199: sascha@199: return sb.append(quoteChar).toString(); sascha@199: } sascha@199: sascha@199: /* sascha@199: public static String sprintf(String format, Object... args) { sascha@199: return sprintf(null, format, args); sascha@199: } sascha@199: */ sascha@199: sascha@199: public static String sprintf(Locale locale, String format, Object ... args) { sascha@199: StringWriter sw = new StringWriter(); sascha@199: PrintWriter pw = new PrintWriter(sw); sascha@199: pw.printf(locale, format, args); sascha@199: pw.flush(); sascha@199: return sw.toString(); sascha@199: } sascha@199: sascha@199: sascha@199: public static void testQuote() { sascha@199: System.err.println("testing quote:"); sascha@199: sascha@199: String cases [] = { sascha@199: "", "''", sascha@199: "test", "test", sascha@199: "test test", "'test test'", sascha@199: " test", "' test'", sascha@199: "test ", "'test '", sascha@199: " test ", "' test '", sascha@199: "'test", "'\\'test'", sascha@199: "'", "'\\''", sascha@199: " ' ' ", "' \\' \\' '", sascha@199: "te'st", "'te\\'st'" sascha@199: }; sascha@199: sascha@199: int failed = 0; sascha@199: sascha@199: for (int i = 0; i < cases.length; i += 2) { sascha@199: String in = cases[i]; sascha@199: String out = cases[i+1]; sascha@199: sascha@199: String res = quote(in, '\''); sascha@199: if (!res.equals(out)) { sascha@199: ++failed; sascha@199: System.err.println( sascha@199: "quote failed on: >" + in + sascha@199: "< result: >" + res + sascha@199: "< expected: >" + out + "<"); sascha@199: } sascha@199: } sascha@199: sascha@199: int T = cases.length/2; sascha@199: sascha@199: System.err.println("tests total: " + T); sascha@199: System.err.println("tests failed: " + failed); sascha@199: System.err.println("tests passed: " + (T - failed)); sascha@199: } sascha@199: sascha@199: public static void testQuoteReplacement() { sascha@199: System.err.println("testing quoteReplacement:"); sascha@199: sascha@199: String cases [] = { sascha@199: "", "", sascha@199: "test", "test", sascha@199: "$", "\\$", sascha@199: "\\", "\\\\", sascha@199: "\\$", "\\\\\\$", sascha@199: "test\\$", "test\\\\\\$", sascha@199: "\\test", "\\\\test", sascha@199: "test$", "test\\$", sascha@199: "test$test", "test\\$test", sascha@199: "$test$", "\\$test\\$" sascha@199: }; sascha@199: sascha@199: int failed = 0; sascha@199: sascha@199: for (int i = 0; i < cases.length; i += 2) { sascha@199: String in = cases[i]; sascha@199: String out = cases[i+1]; sascha@199: sascha@199: String res = quoteReplacement(in); sascha@199: if (!res.equals(out)) { sascha@199: ++failed; sascha@199: System.err.println( sascha@199: "quoteReplacement failed on: '" + in + sascha@199: "' result: '" + res + sascha@199: "' expected: '" + out + "'"); sascha@199: } sascha@199: } sascha@199: sascha@199: int T = cases.length/2; sascha@199: sascha@199: System.err.println("tests total: " + T); sascha@199: System.err.println("tests failed: " + failed); sascha@199: System.err.println("tests passed: " + (T - failed)); sascha@199: } sascha@199: sascha@199: public static void testStringArray2D() { sascha@199: int total = 0; sascha@199: int fail = 0; sascha@199: int passed = 0; sascha@199: sascha@199: System.err.println("testing StringArray2D:"); sascha@199: sascha@199: double[][] testarray = {{1.0, 2.0, 3.0}, sascha@199: {1.1, 2.1, 3.1}, sascha@199: {100.2, 200.2} sascha@199: }; sascha@199: String str = double2DArrayToString(testarray); sascha@199: sascha@199: total += 1; sascha@199: if (str.equals("1.0;2.0;3.0:1.1;2.1;3.1:100.2;200.2")) { sascha@199: passed +=1; sascha@199: } sascha@199: else { sascha@199: fail +=1; sascha@199: System.err.println("Der Ergebnis-String ist nicht richtig:"); sascha@199: System.err.println(str); sascha@199: } sascha@199: sascha@199: sascha@199: sascha@199: double[][] testarray2 = stringToDouble2DArray(str); sascha@199: boolean failed = false; sascha@199: sascha@199: total +=1; sascha@199: for (int i=0; i < testarray.length; i++) sascha@199: for (int j=0; j < testarray[i].length; j++) sascha@199: if (testarray[i][j] != testarray2[i][j]) { sascha@199: System.err.println("Test scheitert bei i=" +i +" j=" +j); sascha@199: System.err.println("alter Wert=" + testarray[i][j] +" neuer Wert=" +testarray2[i][j]); sascha@199: failed = true; sascha@199: } sascha@199: if (failed) { sascha@199: fail +=1; sascha@199: } sascha@199: else { sascha@199: passed +=1; sascha@199: } sascha@199: System.err.println("tests total: "+ total); sascha@199: System.err.println("tests failed: "+ fail); sascha@199: System.err.println("tests passed: "+ passed); sascha@199: } sascha@199: sascha@199: public static void main(String [] args) { sascha@199: sascha@199: testQuoteReplacement(); sascha@199: testQuote(); sascha@199: testStringArray2D(); sascha@199: } felix@5021: felix@5021: /** Check for occurence of needle in hay, converting both to lowercase felix@5021: * to be ignorant of cases. */ felix@5021: public static boolean containsIgnoreCase(String hay, String needle) { felix@5021: return hay.toLowerCase().contains(needle.toLowerCase()); felix@5021: } sascha@199: } sascha@199: // end of file