Prepare changes to version 3. Refactored package and methods. Normalized
methods.
This commit is contained in:
parent
d2d0990e05
commit
6984f9fbfc
10 changed files with 1606 additions and 206 deletions
|
@ -1,5 +1,5 @@
|
||||||
/**
|
/**
|
||||||
* Copyright (C) 2008-2014 Christian Pierre MOMON
|
* Copyright (C) 2008-2015 Christian Pierre MOMON
|
||||||
*
|
*
|
||||||
* This file is part of Devinsy-utils.
|
* This file is part of Devinsy-utils.
|
||||||
*
|
*
|
||||||
|
@ -32,14 +32,16 @@ import java.io.UnsupportedEncodingException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
|
||||||
import fr.devinsy.util.strings.StringList;
|
import fr.devinsy.util.strings.StringList;
|
||||||
|
import fr.devinsy.util.strings.StringListUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author cpm
|
* @author Christian Pierre MOMON (christian.momon@devinsy.fr)
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class FileTools
|
public class FileTools
|
||||||
{
|
{
|
||||||
|
public static final String DEFAULT_CHARSET_NAME = "UTF-8";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
|
@ -151,7 +153,10 @@ public class FileTools
|
||||||
* Source.
|
* Source.
|
||||||
*
|
*
|
||||||
* @return Extension value or null.
|
* @return Extension value or null.
|
||||||
|
* @deprecated See
|
||||||
|
* <code>org.apache.commons.io.FilenameUtils.getExtension</code>
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public static String getExtension(final String fileName)
|
public static String getExtension(final String fileName)
|
||||||
{
|
{
|
||||||
String result;
|
String result;
|
||||||
|
@ -187,7 +192,6 @@ public class FileTools
|
||||||
{
|
{
|
||||||
String result;
|
String result;
|
||||||
|
|
||||||
final String DEFAULT_CHARSET_NAME = "UTF-8";
|
|
||||||
result = load(source, DEFAULT_CHARSET_NAME);
|
result = load(source, DEFAULT_CHARSET_NAME);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -219,7 +223,6 @@ public class FileTools
|
||||||
{
|
{
|
||||||
String result;
|
String result;
|
||||||
|
|
||||||
final String DEFAULT_CHARSET_NAME = "UTF-8";
|
|
||||||
result = load(source, DEFAULT_CHARSET_NAME);
|
result = load(source, DEFAULT_CHARSET_NAME);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -246,6 +249,36 @@ public class FileTools
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public static StringList loadStringList(final File source) throws IOException
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
result = loadStringList(source, DEFAULT_CHARSET_NAME);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public static StringList loadStringList(final File file, final String charsetName) throws IOException
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
result = StringListUtils.load(file, charsetName);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param file
|
* @param file
|
||||||
|
@ -255,7 +288,6 @@ public class FileTools
|
||||||
{
|
{
|
||||||
StringBuffer result;
|
StringBuffer result;
|
||||||
|
|
||||||
final String DEFAULT_CHARSET_NAME = "UTF-8";
|
|
||||||
result = loadToStringBuffer(source, DEFAULT_CHARSET_NAME);
|
result = loadToStringBuffer(source, DEFAULT_CHARSET_NAME);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -321,7 +353,6 @@ public class FileTools
|
||||||
{
|
{
|
||||||
StringList result;
|
StringList result;
|
||||||
|
|
||||||
final String DEFAULT_CHARSET_NAME = "UTF-8";
|
|
||||||
result = loadToStringList(source, DEFAULT_CHARSET_NAME);
|
result = loadToStringList(source, DEFAULT_CHARSET_NAME);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -388,7 +419,6 @@ public class FileTools
|
||||||
{
|
{
|
||||||
StringList result;
|
StringList result;
|
||||||
|
|
||||||
final String DEFAULT_CHARSET_NAME = "UTF-8";
|
|
||||||
result = loadToStringList(source, DEFAULT_CHARSET_NAME);
|
result = loadToStringList(source, DEFAULT_CHARSET_NAME);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -405,10 +435,7 @@ public class FileTools
|
||||||
StringList result;
|
StringList result;
|
||||||
|
|
||||||
//
|
//
|
||||||
result = new StringList();
|
result = StringListUtils.load(source, charsetName);
|
||||||
|
|
||||||
//
|
|
||||||
read(result, source.openStream(), charsetName);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
|
@ -459,56 +486,16 @@ public class FileTools
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param file
|
|
||||||
* @throws IOException
|
|
||||||
*/
|
|
||||||
public static void read(final StringList out, final InputStream is, final String charsetName) throws IOException
|
|
||||||
{
|
|
||||||
BufferedReader in = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
in = new BufferedReader(new InputStreamReader(is, charsetName));
|
|
||||||
|
|
||||||
boolean ended = false;
|
|
||||||
|
|
||||||
while (!ended)
|
|
||||||
{
|
|
||||||
String line = in.readLine();
|
|
||||||
|
|
||||||
if (line == null)
|
|
||||||
{
|
|
||||||
ended = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
out.append(line);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (in != null)
|
|
||||||
{
|
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (IOException exception)
|
|
||||||
{
|
|
||||||
exception.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param source
|
* @param source
|
||||||
* @param extension
|
* @param extension
|
||||||
* @return
|
* @return
|
||||||
|
*
|
||||||
|
* @deprecated See
|
||||||
|
* <code>org.apache.commons.io.FilenameUtils.removeExtension</code>
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public static String removeExtension(final String source)
|
public static String removeExtension(final String source)
|
||||||
{
|
{
|
||||||
String result;
|
String result;
|
||||||
|
@ -547,7 +534,7 @@ public class FileTools
|
||||||
PrintWriter out = null;
|
PrintWriter out = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
|
out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), DEFAULT_CHARSET_NAME));
|
||||||
|
|
||||||
out.println(source);
|
out.println(source);
|
||||||
}
|
}
|
||||||
|
@ -568,20 +555,7 @@ public class FileTools
|
||||||
*/
|
*/
|
||||||
public static void save(final File file, final StringBuffer source) throws UnsupportedEncodingException, FileNotFoundException
|
public static void save(final File file, final StringBuffer source) throws UnsupportedEncodingException, FileNotFoundException
|
||||||
{
|
{
|
||||||
PrintWriter out = null;
|
save(file, source.toString());
|
||||||
try
|
|
||||||
{
|
|
||||||
out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
|
|
||||||
|
|
||||||
out.println(source.toString());
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if (out != null)
|
|
||||||
{
|
|
||||||
out.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -592,20 +566,7 @@ public class FileTools
|
||||||
*/
|
*/
|
||||||
public static void save(final File file, final StringList source) throws UnsupportedEncodingException, FileNotFoundException
|
public static void save(final File file, final StringList source) throws UnsupportedEncodingException, FileNotFoundException
|
||||||
{
|
{
|
||||||
PrintWriter out = null;
|
StringListUtils.save(file, source);
|
||||||
try
|
|
||||||
{
|
|
||||||
out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
|
|
||||||
|
|
||||||
out.println(source.toString());
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if (out != null)
|
|
||||||
{
|
|
||||||
out.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
46
src/fr/devinsy/util/strings/BufferedStringListReader.java
Normal file
46
src/fr/devinsy/util/strings/BufferedStringListReader.java
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
package fr.devinsy.util.strings;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Christian Pierre MOMON (christian.momon@devinsy.fr)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class BufferedStringListReader implements StringListReader
|
||||||
|
{
|
||||||
|
private BufferedReader in;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param in
|
||||||
|
*/
|
||||||
|
public BufferedStringListReader(final BufferedReader in)
|
||||||
|
{
|
||||||
|
this.in = in;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void close()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String readLine() throws IOException
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
result = this.in.readLine();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
128
src/fr/devinsy/util/strings/StringLengthComparator.java
Normal file
128
src/fr/devinsy/util/strings/StringLengthComparator.java
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
package fr.devinsy.util.strings;
|
||||||
|
|
||||||
|
import java.util.Comparator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class StringLengthComparator implements Comparator<String>
|
||||||
|
{
|
||||||
|
private static StringLengthComparator instance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int compare(final String alpha, final String bravo)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
//
|
||||||
|
Integer alphaValue;
|
||||||
|
if (alpha == null)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
alphaValue = null;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
alphaValue = alpha.length();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Integer bravoValue;
|
||||||
|
if (bravo == null)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bravoValue = null;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bravoValue = bravo.length();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = compare(alphaValue, bravoValue);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method compares two nullable string values.
|
||||||
|
*
|
||||||
|
* The comparison manages the local language alphabet order.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* compare(null, null) = 0
|
||||||
|
* compare(null, bravo) < 0
|
||||||
|
* compare(alpha, null) > 0
|
||||||
|
* compare(alpha, bravo) = alpha.compareTo(bravo)
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param alpha
|
||||||
|
* one of the value.
|
||||||
|
*
|
||||||
|
* @param bravo
|
||||||
|
* the other value.
|
||||||
|
*
|
||||||
|
* @return zero or a positive value or a negative value.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static int compare(final Integer alpha, final Integer bravo)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
//
|
||||||
|
if ((alpha == null) && (bravo == null))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (alpha == null)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = -1;
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (bravo == null)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = +1;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = alpha.compareTo(bravo);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static StringLengthComparator instance()
|
||||||
|
{
|
||||||
|
StringLengthComparator result;
|
||||||
|
|
||||||
|
if (instance == null)
|
||||||
|
{
|
||||||
|
instance = new StringLengthComparator();
|
||||||
|
}
|
||||||
|
|
||||||
|
result = instance;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -23,11 +23,16 @@ import java.text.Collator;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is a collection of String objects with specific methods. It makes
|
* This class is a collection of String objects with specific methods. It makes
|
||||||
* possible to build a string without any copy. The goal is to optimize the
|
* possible to build a string without any copy. The goal is to optimize the
|
||||||
* building of strings where they are lot of concatenation action.
|
* building of strings where they are lot of concatenation action.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
public class StringList extends ArrayList<String> implements CharSequence
|
public class StringList extends ArrayList<String> implements CharSequence
|
||||||
{
|
{
|
||||||
|
@ -161,28 +166,6 @@ public class StringList extends ArrayList<String> implements CharSequence
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Appends the string representation of the Double argument to this string
|
|
||||||
* list.
|
|
||||||
*
|
|
||||||
* @param value
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public StringList append(final Double value)
|
|
||||||
{
|
|
||||||
StringList result;
|
|
||||||
|
|
||||||
if (value != null)
|
|
||||||
{
|
|
||||||
this.append(String.valueOf(value));
|
|
||||||
}
|
|
||||||
|
|
||||||
result = this;
|
|
||||||
|
|
||||||
//
|
|
||||||
return (result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Appends the string representation of the int argument to this string
|
* Appends the string representation of the int argument to this string
|
||||||
* list.
|
* list.
|
||||||
|
@ -217,6 +200,45 @@ public class StringList extends ArrayList<String> implements CharSequence
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends the string representation of the int argument to this string
|
||||||
|
* list.
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public StringList append(final Object value)
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
if (value != null)
|
||||||
|
{
|
||||||
|
this.append(value.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
result = this;
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends the string representation of the long argument to this string
|
||||||
|
* list.
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public StringList append(final short value)
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
result = this.append(String.valueOf(value));
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Appends the string argument to this string list.
|
* Appends the string argument to this string list.
|
||||||
*
|
*
|
||||||
|
@ -358,6 +380,36 @@ public class StringList extends ArrayList<String> implements CharSequence
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public StringList appendln(final Object value)
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
result = this.append(value).appendln();
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public StringList appendln(final short value)
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
result = this.append(value).appendln();
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param string
|
* @param string
|
||||||
|
@ -406,6 +458,22 @@ public class StringList extends ArrayList<String> implements CharSequence
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param position
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public char charAt(final StringListCharPosition position)
|
||||||
|
{
|
||||||
|
char result;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = get(position.getStringIndex()).charAt(position.getLocalCharIndex());
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deep copy and shallow copy have no sense about a list of immutable
|
* Deep copy and shallow copy have no sense about a list of immutable
|
||||||
* objects.
|
* objects.
|
||||||
|
@ -428,6 +496,150 @@ public class StringList extends ArrayList<String> implements CharSequence
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param source
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean containsAny(final Collection<String> target)
|
||||||
|
{
|
||||||
|
boolean result;
|
||||||
|
|
||||||
|
if (target == null)
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
boolean ended = false;
|
||||||
|
Iterator<String> iterator = target.iterator();
|
||||||
|
result = false;
|
||||||
|
while (!ended)
|
||||||
|
{
|
||||||
|
if (iterator.hasNext())
|
||||||
|
{
|
||||||
|
String current = iterator.next();
|
||||||
|
|
||||||
|
if (this.contains(current))
|
||||||
|
{
|
||||||
|
ended = true;
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ended = true;
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean containsBlank()
|
||||||
|
{
|
||||||
|
boolean result;
|
||||||
|
|
||||||
|
boolean ended = false;
|
||||||
|
Iterator<String> iterator = iterator();
|
||||||
|
result = false;
|
||||||
|
while (!ended)
|
||||||
|
{
|
||||||
|
if (iterator.hasNext())
|
||||||
|
{
|
||||||
|
String line = iterator.next();
|
||||||
|
|
||||||
|
if (StringUtils.isBlank(line))
|
||||||
|
{
|
||||||
|
ended = true;
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ended = false;
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean containsEmpty()
|
||||||
|
{
|
||||||
|
boolean result;
|
||||||
|
|
||||||
|
boolean ended = false;
|
||||||
|
Iterator<String> iterator = iterator();
|
||||||
|
result = false;
|
||||||
|
while (!ended)
|
||||||
|
{
|
||||||
|
if (iterator.hasNext())
|
||||||
|
{
|
||||||
|
String line = iterator.next();
|
||||||
|
|
||||||
|
if (StringUtils.isEmpty(line))
|
||||||
|
{
|
||||||
|
ended = true;
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ended = false;
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean containsNull()
|
||||||
|
{
|
||||||
|
boolean result;
|
||||||
|
|
||||||
|
boolean ended = false;
|
||||||
|
Iterator<String> iterator = iterator();
|
||||||
|
result = false;
|
||||||
|
while (!ended)
|
||||||
|
{
|
||||||
|
if (iterator.hasNext())
|
||||||
|
{
|
||||||
|
String line = iterator.next();
|
||||||
|
|
||||||
|
if (line == null)
|
||||||
|
{
|
||||||
|
ended = true;
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ended = false;
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param id
|
* @param id
|
||||||
|
@ -485,6 +697,192 @@ public class StringList extends ArrayList<String> implements CharSequence
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getLongestBytesLine()
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
if (isEmpty())
|
||||||
|
{
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int max = 0;
|
||||||
|
result = "";
|
||||||
|
for (String line : this)
|
||||||
|
{
|
||||||
|
if (line.getBytes().length > max)
|
||||||
|
{
|
||||||
|
max = line.length();
|
||||||
|
result = line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getLongestLine()
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
if (isEmpty())
|
||||||
|
{
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int max = 0;
|
||||||
|
result = "";
|
||||||
|
for (String line : this)
|
||||||
|
{
|
||||||
|
if (line.length() > max)
|
||||||
|
{
|
||||||
|
max = line.length();
|
||||||
|
result = line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public StringList getNotBlank()
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
result = new StringList();
|
||||||
|
|
||||||
|
for (String line : this)
|
||||||
|
{
|
||||||
|
if (StringUtils.isNotBlank(line))
|
||||||
|
{
|
||||||
|
result.add(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public StringList getNotEmpty()
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
result = new StringList();
|
||||||
|
|
||||||
|
for (String line : this)
|
||||||
|
{
|
||||||
|
if (StringUtils.isNotEmpty(line))
|
||||||
|
{
|
||||||
|
result.add(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public StringList getNotNull()
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
result = new StringList();
|
||||||
|
|
||||||
|
for (String line : this)
|
||||||
|
{
|
||||||
|
if (line != null)
|
||||||
|
{
|
||||||
|
result.add(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getShortestBytesLine()
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
if (isEmpty())
|
||||||
|
{
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int min = Integer.MAX_VALUE;
|
||||||
|
result = null;
|
||||||
|
for (String line : this)
|
||||||
|
{
|
||||||
|
if (line.getBytes().length < min)
|
||||||
|
{
|
||||||
|
min = line.length();
|
||||||
|
result = line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getShortestLine()
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
if (isEmpty())
|
||||||
|
{
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int min = Integer.MAX_VALUE;
|
||||||
|
result = null;
|
||||||
|
for (String line : this)
|
||||||
|
{
|
||||||
|
if (line.length() < min)
|
||||||
|
{
|
||||||
|
min = line.length();
|
||||||
|
result = line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param index
|
* @param index
|
||||||
|
@ -526,6 +924,148 @@ public class StringList extends ArrayList<String> implements CharSequence
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
* @param startIndex
|
||||||
|
* @return the index of the next line not null, -1 otherwise.
|
||||||
|
*/
|
||||||
|
public int indexOfNextLineNotNull(final int startIndex)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
boolean ended = false;
|
||||||
|
int currentIndex = startIndex;
|
||||||
|
result = -1;
|
||||||
|
while (!ended)
|
||||||
|
{
|
||||||
|
if (currentIndex >= this.size())
|
||||||
|
{
|
||||||
|
ended = true;
|
||||||
|
result = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (this.get(currentIndex) == null)
|
||||||
|
{
|
||||||
|
ended = true;
|
||||||
|
result = currentIndex;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentIndex += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param position
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean isOutOfBounds(final StringListCharPosition position)
|
||||||
|
{
|
||||||
|
boolean result;
|
||||||
|
|
||||||
|
if (position == null)
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (isOutOfList(position))
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
else if (isOutOfLine(position))
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param position
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean isOutOfLine(final StringListCharPosition position)
|
||||||
|
{
|
||||||
|
boolean result;
|
||||||
|
|
||||||
|
if (position == null)
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (position.getLocalCharIndex() >= this.get(position.getStringIndex()).length())
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param position
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean isOutOfList(final StringListCharPosition position)
|
||||||
|
{
|
||||||
|
boolean result;
|
||||||
|
|
||||||
|
if (position == null)
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (position.getStringIndex() >= this.size())
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public Iterator<Character> iteratorOfChar()
|
||||||
|
{
|
||||||
|
Iterator<Character> result;
|
||||||
|
|
||||||
|
result = new StringListCharIterator(this);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the length of the string list concatenation. Null strings are
|
||||||
|
* ignored.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int length()
|
public int length()
|
||||||
|
@ -533,9 +1073,11 @@ public class StringList extends ArrayList<String> implements CharSequence
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
for (String string : this)
|
for (String string : this)
|
||||||
|
{
|
||||||
|
if (string != null)
|
||||||
{
|
{
|
||||||
result += string.length();
|
result += string.length();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -619,6 +1161,24 @@ public class StringList extends ArrayList<String> implements CharSequence
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sorts this list.
|
||||||
|
*
|
||||||
|
* @return This List.
|
||||||
|
*/
|
||||||
|
public StringList reverse()
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
Collections.reverse(this);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = this;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sorts this list.
|
* Sorts this list.
|
||||||
*
|
*
|
||||||
|
@ -637,6 +1197,42 @@ public class StringList extends ArrayList<String> implements CharSequence
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sorts this list.
|
||||||
|
*
|
||||||
|
* @return This List.
|
||||||
|
*/
|
||||||
|
public StringList sort(final Comparator<String> comparator)
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
Collections.sort(this, comparator);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = this;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sorts this list.
|
||||||
|
*
|
||||||
|
* @return This List.
|
||||||
|
*/
|
||||||
|
public StringList sortByLength()
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
Collections.sort(this, StringLengthComparator.instance());
|
||||||
|
|
||||||
|
//
|
||||||
|
result = this;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
|
@ -844,6 +1440,43 @@ public class StringList extends ArrayList<String> implements CharSequence
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param strings
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String toStringWithBracket()
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
result = toString("[", ",", "]");
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param source
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String toStringWithBrackets()
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
StringList buffer = new StringList();
|
||||||
|
|
||||||
|
for (String string : this)
|
||||||
|
{
|
||||||
|
buffer.append("[").append(string).append("]");
|
||||||
|
}
|
||||||
|
|
||||||
|
result = buffer.toString();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
|
|
133
src/fr/devinsy/util/strings/StringListCharIterator.java
Normal file
133
src/fr/devinsy/util/strings/StringListCharIterator.java
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2014-2015 Christian Pierre MOMON
|
||||||
|
*
|
||||||
|
* This file is part of Devinsy-utils.
|
||||||
|
*
|
||||||
|
* Devinsy-utils is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Devinsy-utils is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Devinsy-utils. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
*/
|
||||||
|
package fr.devinsy.util.strings;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class StringListCharIterator implements Iterator<Character>
|
||||||
|
{
|
||||||
|
private StringList source;
|
||||||
|
private StringListCharPosition currentPosition;
|
||||||
|
private StringListCharPosition nextPosition;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public StringListCharIterator(final StringList source)
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.source = source;
|
||||||
|
this.nextPosition = new StringListCharPosition();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean hasNext()
|
||||||
|
{
|
||||||
|
boolean result;
|
||||||
|
|
||||||
|
if (this.source == null)
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (this.source.isOutOfBounds(this.nextPosition))
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Character next()
|
||||||
|
{
|
||||||
|
Character result;
|
||||||
|
|
||||||
|
if (this.source == null)
|
||||||
|
{
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (hasNext())
|
||||||
|
{
|
||||||
|
result = this.source.charAt(this.nextPosition);
|
||||||
|
|
||||||
|
this.nextPosition.next();
|
||||||
|
|
||||||
|
if (this.source.isOutOfLine(this.nextPosition))
|
||||||
|
{
|
||||||
|
this.nextPosition.nextEndOfLine();
|
||||||
|
|
||||||
|
while ((!this.source.isOutOfList(this.nextPosition)) && (this.source.get(this.nextPosition.getStringIndex()) == null))
|
||||||
|
{
|
||||||
|
this.nextPosition.nextEndOfLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public StringListCharPosition nextPosition()
|
||||||
|
{
|
||||||
|
StringListCharPosition result;
|
||||||
|
|
||||||
|
result = new StringListCharPosition(this.nextPosition);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Do nothing.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void remove()
|
||||||
|
{
|
||||||
|
// TODO or not TODO?
|
||||||
|
}
|
||||||
|
}
|
|
@ -29,6 +29,19 @@ public class StringListCharPosition
|
||||||
private int stringIndex;
|
private int stringIndex;
|
||||||
private int localCharIndex;
|
private int localCharIndex;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param index
|
||||||
|
* @param stringIndex
|
||||||
|
* @param localIndex
|
||||||
|
*/
|
||||||
|
public StringListCharPosition()
|
||||||
|
{
|
||||||
|
this.charIndex = 0;
|
||||||
|
this.stringIndex = 0;
|
||||||
|
this.localCharIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param index
|
* @param index
|
||||||
|
@ -42,6 +55,17 @@ public class StringListCharPosition
|
||||||
this.localCharIndex = localIndex;
|
this.localCharIndex = localIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param source
|
||||||
|
*/
|
||||||
|
public StringListCharPosition(final StringListCharPosition source)
|
||||||
|
{
|
||||||
|
this.charIndex = source.getCharIndex();
|
||||||
|
this.stringIndex = source.getStringIndex();
|
||||||
|
this.localCharIndex = source.getLocalCharIndex();
|
||||||
|
}
|
||||||
|
|
||||||
public int getCharIndex()
|
public int getCharIndex()
|
||||||
{
|
{
|
||||||
return this.charIndex;
|
return this.charIndex;
|
||||||
|
@ -57,6 +81,18 @@ public class StringListCharPosition
|
||||||
return this.stringIndex;
|
return this.stringIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void next()
|
||||||
|
{
|
||||||
|
this.charIndex += 1;
|
||||||
|
this.localCharIndex += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void nextEndOfLine()
|
||||||
|
{
|
||||||
|
this.localCharIndex = 0;
|
||||||
|
this.stringIndex += 1;
|
||||||
|
}
|
||||||
|
|
||||||
public void setCharIndex(final int charIndex)
|
public void setCharIndex(final int charIndex)
|
||||||
{
|
{
|
||||||
this.charIndex = charIndex;
|
this.charIndex = charIndex;
|
||||||
|
@ -71,4 +107,5 @@ public class StringListCharPosition
|
||||||
{
|
{
|
||||||
this.stringIndex = stringIndex;
|
this.stringIndex = stringIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
23
src/fr/devinsy/util/strings/StringListReader.java
Normal file
23
src/fr/devinsy/util/strings/StringListReader.java
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
package fr.devinsy.util.strings;
|
||||||
|
|
||||||
|
import java.io.Closeable;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Christian Pierre MOMON (christian.momon@devinsy.fr)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface StringListReader extends Closeable
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
void close();
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
String readLine() throws IOException;
|
||||||
|
}
|
|
@ -18,6 +18,18 @@
|
||||||
*/
|
*/
|
||||||
package fr.devinsy.util.strings;
|
package fr.devinsy.util.strings;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStreamWriter;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URL;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -28,24 +40,64 @@ import java.util.Collection;
|
||||||
*/
|
*/
|
||||||
public class StringListUtils
|
public class StringListUtils
|
||||||
{
|
{
|
||||||
|
public static final String DEFAULT_CHARSET_NAME = "UTF-8";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param prefix
|
* @param target
|
||||||
* @param separator
|
|
||||||
* @param postfix
|
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public String toString(final StringList source, final String prefix, final String separator, final String postfix)
|
public StringSet getComplement(final Collection<String> alpha, final Collection<String> bravo)
|
||||||
{
|
{
|
||||||
String result;
|
StringSet result;
|
||||||
|
|
||||||
if (source == null)
|
result = getDifference(bravo, alpha);
|
||||||
{
|
|
||||||
result = prefix + postfix;
|
//
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param target
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public StringSet getDifference(final Collection<String> alpha, final Collection<String> bravo)
|
||||||
{
|
{
|
||||||
result = source.toString(prefix, separator, postfix);
|
StringSet result;
|
||||||
|
|
||||||
|
result = new StringSet(alpha);
|
||||||
|
result.removeAll(bravo);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param target
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public StringSet getDisjunction(final Collection<String> alpha, final Collection<String> bravo)
|
||||||
|
{
|
||||||
|
StringSet result;
|
||||||
|
|
||||||
|
result = new StringSet();
|
||||||
|
|
||||||
|
for (String string : alpha)
|
||||||
|
{
|
||||||
|
if (!bravo.contains(string))
|
||||||
|
{
|
||||||
|
result.add(string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String string : bravo)
|
||||||
|
{
|
||||||
|
if (!alpha.contains(string))
|
||||||
|
{
|
||||||
|
result.add(string);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -53,30 +105,235 @@ public class StringListUtils
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds a string list concatenating several time one string.
|
*
|
||||||
|
* @param target
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public StringSet getIntersectionOf(final Collection<String> alpha, final Collection<String> bravo)
|
||||||
|
{
|
||||||
|
StringSet result;
|
||||||
|
|
||||||
|
result = new StringSet();
|
||||||
|
|
||||||
|
for (String string : alpha)
|
||||||
|
{
|
||||||
|
if (bravo.contains(string))
|
||||||
|
{
|
||||||
|
result.add(string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param target
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public StringSet getUnionOf(final Collection<String> alpha, final Collection<String> bravo)
|
||||||
|
{
|
||||||
|
StringSet result;
|
||||||
|
|
||||||
|
result = new StringSet(alpha);
|
||||||
|
|
||||||
|
for (String string : bravo)
|
||||||
|
{
|
||||||
|
result.add(string);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds a string concatenating many times a source string.
|
||||||
*
|
*
|
||||||
* @param source
|
* @param source
|
||||||
* The string to concatenate several time.
|
* The string to concatenate several time.
|
||||||
* @param number
|
*
|
||||||
* The number of times to multiply.
|
* @param multiplier
|
||||||
|
* The number of concatenate to produce.
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static String multiply(final String source, final int number)
|
public static String concatenate(final String source, final int multiplier)
|
||||||
{
|
{
|
||||||
String result;
|
String result;
|
||||||
|
|
||||||
StringList strings = new StringList(number);
|
result = repeat(source, multiplier).toString();
|
||||||
for (int count = 0; count < number; count++)
|
|
||||||
{
|
|
||||||
strings.append(source);
|
|
||||||
}
|
|
||||||
|
|
||||||
result = strings.toString();
|
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public static StringList load(final File source) throws IOException
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
result = load(source, DEFAULT_CHARSET_NAME);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public static StringList load(final File file, final String charsetName) throws IOException
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = new StringList();
|
||||||
|
|
||||||
|
//
|
||||||
|
StringListUtils.read(result, new FileInputStream(file), charsetName);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public static StringList load(final URL source) throws IOException
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
result = load(source, DEFAULT_CHARSET_NAME);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public static StringList load(final URL source, final String charsetName) throws IOException
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = new StringList();
|
||||||
|
|
||||||
|
//
|
||||||
|
StringListUtils.read(result, source.openStream(), charsetName);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public static void read(final StringList out, final InputStream is, final String charsetName) throws IOException
|
||||||
|
{
|
||||||
|
BufferedReader in = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
in = new BufferedReader(new InputStreamReader(is, charsetName));
|
||||||
|
|
||||||
|
boolean ended = false;
|
||||||
|
|
||||||
|
while (!ended)
|
||||||
|
{
|
||||||
|
String line = in.readLine();
|
||||||
|
|
||||||
|
if (line == null)
|
||||||
|
{
|
||||||
|
ended = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
out.append(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (in != null)
|
||||||
|
{
|
||||||
|
in.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (IOException exception)
|
||||||
|
{
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds a string list concatenating many times a source string.
|
||||||
|
*
|
||||||
|
* @param source
|
||||||
|
* The string to concatenate several time.
|
||||||
|
*
|
||||||
|
* @param multiplier
|
||||||
|
* The number of concatenate to produce.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static StringList repeat(final String source, final int multiplier)
|
||||||
|
{
|
||||||
|
StringList result;
|
||||||
|
|
||||||
|
result = new StringList(multiplier);
|
||||||
|
for (int count = 0; count < multiplier; count++)
|
||||||
|
{
|
||||||
|
result.append(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* @throws FileNotFoundException
|
||||||
|
* @throws UnsupportedEncodingException
|
||||||
|
*/
|
||||||
|
public static void save(final File file, final StringList source) throws UnsupportedEncodingException, FileNotFoundException
|
||||||
|
{
|
||||||
|
PrintWriter out = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), DEFAULT_CHARSET_NAME));
|
||||||
|
|
||||||
|
if (source != null)
|
||||||
|
{
|
||||||
|
for (String string : source)
|
||||||
|
{
|
||||||
|
out.println(string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (out != null)
|
||||||
|
{
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sorts the string list.
|
* Sorts the string list.
|
||||||
*
|
*
|
||||||
|
@ -116,6 +373,79 @@ public class StringListUtils
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param prefix
|
||||||
|
* @param separator
|
||||||
|
* @param postfix
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String toString(final String[] source, final String prefix, final String separator, final String postfix)
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
if (source == null)
|
||||||
|
{
|
||||||
|
result = new StringList().toString(prefix, null, postfix);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = new StringList(source).toString(prefix, separator, postfix);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param prefix
|
||||||
|
* @param separator
|
||||||
|
* @param postfix
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String toString(final StringList source, final String prefix, final String separator, final String postfix)
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
if (source == null)
|
||||||
|
{
|
||||||
|
result = new StringList().toString(prefix, null, postfix);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = source.toString(prefix, separator, postfix);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a {@code Collection<String>} to an array of {@code String}.
|
||||||
|
*
|
||||||
|
* @param source
|
||||||
|
* The string list to convert.
|
||||||
|
*
|
||||||
|
* @return The result of the conversion.
|
||||||
|
*/
|
||||||
|
public static String[] toStringArray(final Collection<String> source)
|
||||||
|
{
|
||||||
|
String[] result;
|
||||||
|
|
||||||
|
if (source == null)
|
||||||
|
{
|
||||||
|
result = new String[0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = new StringList(source).toStringArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a {@code StringList} to an array of {@code String}.
|
* Converts a {@code StringList} to an array of {@code String}.
|
||||||
*
|
*
|
||||||
|
@ -150,11 +480,11 @@ public class StringListUtils
|
||||||
* @return If argument is null then returns an empty string, otherwise
|
* @return If argument is null then returns an empty string, otherwise
|
||||||
* returns a string concatenation of the argument.
|
* returns a string concatenation of the argument.
|
||||||
*/
|
*/
|
||||||
public static String toStringNotNull(final String[] strings)
|
public static String toStringNotNull(final String[] source)
|
||||||
{
|
{
|
||||||
String result;
|
String result;
|
||||||
|
|
||||||
result = toString(strings);
|
result = toString(source);
|
||||||
|
|
||||||
if (result == null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
|
@ -170,23 +500,17 @@ public class StringListUtils
|
||||||
* @param strings
|
* @param strings
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static String toStringWithBracket(final Collection<String> strings)
|
public static String toStringWithBracket(final Collection<String> source)
|
||||||
{
|
{
|
||||||
String result;
|
String result;
|
||||||
|
|
||||||
if (strings == null)
|
if (source == null)
|
||||||
{
|
{
|
||||||
result = null;
|
result = null;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringList buffer = new StringList();
|
result = new StringList(source).toStringWithBracket();
|
||||||
|
|
||||||
buffer.append("[");
|
|
||||||
buffer.append(toStringWithCommas(strings));
|
|
||||||
buffer.append("]");
|
|
||||||
|
|
||||||
result = buffer.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -198,23 +522,17 @@ public class StringListUtils
|
||||||
* @param strings
|
* @param strings
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static String toStringWithBracket(final String[] strings)
|
public static String toStringWithBracket(final String[] source)
|
||||||
{
|
{
|
||||||
String result;
|
String result;
|
||||||
|
|
||||||
if (strings == null)
|
if (source == null)
|
||||||
{
|
{
|
||||||
result = null;
|
result = null;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringList merge = new StringList();
|
result = new StringList(source).toStringWithBracket();
|
||||||
|
|
||||||
merge.append("[");
|
|
||||||
merge.append(toStringWithCommas(strings));
|
|
||||||
merge.append("]");
|
|
||||||
|
|
||||||
result = merge.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -226,11 +544,33 @@ public class StringListUtils
|
||||||
* @param strings
|
* @param strings
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static String toStringWithBracketNotNull(final Collection<String> strings)
|
public static String toStringWithBracket(final StringList source)
|
||||||
{
|
{
|
||||||
String result;
|
String result;
|
||||||
|
|
||||||
result = toStringWithBrackets(strings);
|
if (source == null)
|
||||||
|
{
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = source.toStringWithBracket();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param strings
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String toStringWithBracketNotNull(final Collection<String> source)
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
result = toStringWithBracket(source);
|
||||||
|
|
||||||
if (result == null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
|
@ -246,11 +586,31 @@ public class StringListUtils
|
||||||
* @param strings
|
* @param strings
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static String toStringWithBracketNotNull(final String[] strings)
|
public static String toStringWithBracketNotNull(final String[] source)
|
||||||
{
|
{
|
||||||
String result;
|
String result;
|
||||||
|
|
||||||
result = toStringWithBrackets(strings);
|
result = toStringWithBracket(source);
|
||||||
|
|
||||||
|
if (result == null)
|
||||||
|
{
|
||||||
|
result = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param strings
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String toStringWithBracketNotNull(final StringList source)
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
result = toStringWithBracket(source);
|
||||||
|
|
||||||
if (result == null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
|
@ -276,14 +636,7 @@ public class StringListUtils
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringList buffer = new StringList();
|
result = new StringList(source).toStringWithBrackets();
|
||||||
|
|
||||||
for (String string : source)
|
|
||||||
{
|
|
||||||
buffer.append("[").append(string).append("]");
|
|
||||||
}
|
|
||||||
|
|
||||||
result = buffer.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -305,14 +658,29 @@ public class StringListUtils
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringList merge = new StringList();
|
result = new StringList(source).toStringWithBrackets();
|
||||||
|
|
||||||
for (String string : source)
|
|
||||||
{
|
|
||||||
merge.append("[").append(string).append("]");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
result = merge.toString();
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param source
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String toStringWithBrackets(final StringList source)
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
if (source == null)
|
||||||
|
{
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = source.toStringWithBrackets();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -334,7 +702,7 @@ public class StringListUtils
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = new StringList(source).toStringSeparatedBy(",");
|
result = new StringList(source).toStringWithCommas();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -356,7 +724,29 @@ public class StringListUtils
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = new StringList(source).toStringSeparatedBy(",");
|
result = new StringList(source).toStringWithCommas();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param source
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String toStringWithCommas(final StringList source)
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
if (source == null)
|
||||||
|
{
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = source.toStringWithCommas();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -378,7 +768,7 @@ public class StringListUtils
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = new StringList(source).toStringSeparatedBy(", ");
|
result = new StringList(source).toStringWithFrenchCommas();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -400,7 +790,29 @@ public class StringListUtils
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = new StringList(source).toStringSeparatedBy(", ");
|
result = new StringList(source).toStringWithFrenchCommas();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param source
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String toStringWithFrenchCommas(final StringList source)
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
if (source == null)
|
||||||
|
{
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = source.toStringWithFrenchCommas();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
*/
|
*/
|
||||||
package fr.devinsy.util.strings;
|
package fr.devinsy.util.strings;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -38,6 +39,26 @@ public class StringSet extends HashSet<String>
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a list of string of the specified collection, in the order
|
||||||
|
* they are returned by the collection's iterator.
|
||||||
|
*
|
||||||
|
* @param source
|
||||||
|
*/
|
||||||
|
public StringSet(final Collection<String> source)
|
||||||
|
{
|
||||||
|
super(source.size());
|
||||||
|
|
||||||
|
if (source != null)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (String string : source)
|
||||||
|
{
|
||||||
|
this.add(string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -46,23 +67,6 @@ public class StringSet extends HashSet<String>
|
||||||
super(initialCapacity);
|
super(initialCapacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public StringSet(final List<String> source)
|
|
||||||
{
|
|
||||||
super();
|
|
||||||
|
|
||||||
if (source != null)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
for (String string : source)
|
|
||||||
{
|
|
||||||
this.add(string);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -80,23 +84,6 @@ public class StringSet extends HashSet<String>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public StringSet(final StringList source)
|
|
||||||
{
|
|
||||||
super();
|
|
||||||
|
|
||||||
if (source != null)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
for (String string : source)
|
|
||||||
{
|
|
||||||
this.add(string);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
*/
|
*/
|
||||||
package fr.devinsy.util;
|
package fr.devinsy.util;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
import org.apache.log4j.BasicConfigurator;
|
import org.apache.log4j.BasicConfigurator;
|
||||||
import org.apache.log4j.Level;
|
import org.apache.log4j.Level;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
@ -26,6 +28,8 @@ import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import fr.devinsy.util.strings.StringList;
|
import fr.devinsy.util.strings.StringList;
|
||||||
|
import fr.devinsy.util.strings.StringListCharIterator;
|
||||||
|
import fr.devinsy.util.strings.StringListCharPosition;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -210,6 +214,42 @@ public class StringListTest
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testIteratorOfChar01()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
logger.debug("===== test starting...");
|
||||||
|
|
||||||
|
//
|
||||||
|
StringList source = new StringList();
|
||||||
|
source.append("abc");
|
||||||
|
source.append("def");
|
||||||
|
source.append("ghi");
|
||||||
|
source.append("jkl");
|
||||||
|
source.append("mno");
|
||||||
|
|
||||||
|
//
|
||||||
|
Iterator<Character> iterator = source.iteratorOfChar();
|
||||||
|
|
||||||
|
for (int index = 0; index < source.length(); index++)
|
||||||
|
{
|
||||||
|
StringListCharPosition position = ((StringListCharIterator) iterator).nextPosition();
|
||||||
|
System.out.println(index + ":" + source.charAt(index) + " " + position.getCharIndex() + " " + position.getStringIndex() + " " + position.getLocalCharIndex());
|
||||||
|
|
||||||
|
Assert.assertTrue(iterator.hasNext());
|
||||||
|
|
||||||
|
Character character = ((StringListCharIterator) iterator).next();
|
||||||
|
|
||||||
|
Assert.assertEquals(character, new Character(source.charAt(index)));
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
logger.debug("===== test done.");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testSubstring01()
|
public void testSubstring01()
|
||||||
|
|
Loading…
Reference in a new issue