FileDocCategorySizeDatePackage
Strings.javaAPI DocAndroid 1.5 API9700Wed May 06 22:41:16 BST 2009com.vladium.util

Strings

public abstract class Strings extends Object
author
Vlad Roubtsov, (C) 2003

Fields Summary
public static final String
WHITE_SPACE
private static final boolean
USE_GET_CHARS
Constructors Summary
private Strings()

Methods Summary
public static voidHTMLEscape(java.lang.String s, java.lang.StringBuffer append)
HTML attribute values can be quoted using either double or single quotes. Depending on the type of quote used, the other kind can be used unescaped within the attribute value. This method assumes that only double quotes are used for delimiting, hence this is the only kind that is escaped.

        if (s == null) throw new IllegalArgumentException ("null input: s");
        if (append == null) throw new IllegalArgumentException ("null input: append");
        
        final char [] chars;
        if (USE_GET_CHARS) chars = s.toCharArray (); 
        
        for (int i = 0, iLimit = s.length (); i < iLimit; ++ i)
        {
            final char c = USE_GET_CHARS ? chars [i] : s.charAt (i);
            
            switch (c)
            {
                case '<":
                    append.append ("<");
                    break;
                    
                case '>":
                    append.append (">");
                    break;

                case '"":
                    append.append (""");
                    break;
                    
                case '&":
                    append.append ("&");
                    break;
                
                default:
                    append.append (c);    
                
            } // end of switch
        }
    
public static java.lang.StringHTMLEscape(java.lang.String s)

        final StringBuffer buf = new StringBuffer ();
        HTMLEscape (s, buf);
        
        return buf.toString ();
    
public static voidHTMLEscapeNB(java.lang.String s, java.lang.StringBuffer append)
Same as {@link #HTMLEscape(String, StringBuffer)} but also replaces spaces with " "'s, which is handy for escaping code.

        if (s == null) throw new IllegalArgumentException ("null input: s");
        if (append == null) throw new IllegalArgumentException ("null input: append");
        
        final char [] chars;
        if (USE_GET_CHARS) chars = s.toCharArray (); 
        
        for (int i = 0, iLimit = s.length (); i < iLimit; ++ i)
        {
            final char c = USE_GET_CHARS ? chars [i] : s.charAt (i);
            
            switch (c)
            {
                case ' ":
                    append.append ('\u00A0"); // don't use " ": a waste of space
                    break;
                    
                case '\t":
                    append.append ("\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0"); // TODO: define a prop for this
                    break;
                    
//                case '-':
//                    append.append ((char) 0x8209);
//                    break;
                    
                case '<":
                    append.append ("<");
                    break;
                    
                case '>":
                    append.append (">");
                    break;

                case '"":
                    append.append (""");
                    break;
                    
                case '&":
                    append.append ("&");
                    break;
                
                default:
                    append.append (c);    
                
            } // end of switch
        }
    
public static java.lang.StringHTMLEscapeSP(java.lang.String s)

        final StringBuffer buf = new StringBuffer ();
        HTMLEscapeNB (s, buf);
        
        return buf.toString ();
    
public static java.lang.String[]merge(java.lang.String[] strings, java.lang.String delimiters, boolean removeNull)
Also removes duplicates.

param
strings
param
delimiters
param
removeNull
return

        if (strings == null) return strings;
        
        final int length = strings.length;
        if (length == 0) return strings;
        
        if ((delimiters == null) || (delimiters.length () == 0))
            throw new IllegalArgumentException ("null/empty input: delimiters");
        
        final Set /* String */ _strings = new HashSet (length);
        final List /* String */ _result = new ArrayList (length);
        
        for (int i = 0; i < length; ++ i)
        {
            final String s = strings [i];
            if (removeNull && (s == null)) continue;
            
            final StringTokenizer tokenizer = new StringTokenizer (s, delimiters);
            while (tokenizer.hasMoreTokens ())
            {
                final String ss = tokenizer.nextToken ();
                if (_strings.add (ss)) _result.add (ss);
            }
        }
        
        final String [] result = new String [_result.size ()];
        _result.toArray (result);
            
        return result; 
    
public static java.lang.String[]mergeAT(java.lang.String[] strings, java.lang.String delimiters, boolean processAtFiles)
Removes duplicates.

param
delimiters
param
processAtFiles
return
throws
IOException

        if (! processAtFiles)
            return merge (strings, delimiters, true);
        else
        {
            if (strings == null) return strings;
        
            final int length = strings.length;
            if (length == 0) return strings;
            
            if ((delimiters == null) || (delimiters.length () == 0))
                throw new IllegalArgumentException ("null/empty input: delimiters");
            
            final Set /* String */ _strings = new HashSet (length);
            final List /* String */ _result = new ArrayList (length);
            
            for (int i = 0; i < length; ++ i)
            {
                final String s = strings [i];
                if (s == null) continue;
                
                final StringTokenizer tokenizer = new StringTokenizer (s, delimiters);
                while (tokenizer.hasMoreTokens ())
                {
                    final String ss = tokenizer.nextToken ();
                        
                    if (ss.startsWith ("@"))
                    {
                        final String [] fileList = Files.readFileList (new File (ss.substring (1)));
                        for (int j = 0; j < fileList.length; ++ j)
                        {
                            final String sss = fileList [j];
                            if (_strings.add (sss)) _result.add (sss);
                        }
                    }
                    else if (_strings.add (ss)) _result.add (ss);
                }
            }
            
            final String [] result = new String [_result.size ()];
            _result.toArray (result);
                
            return result;
        }
    
public static java.lang.String[]removeDuplicates(java.lang.String[] strings, boolean removeNull)

        if (strings == null) return strings;
        
        final int length = strings.length;
        if (length == 0) return strings;
        
        final Set /* String */ _strings = new HashSet (length);
        final List /* String */ _result = new ArrayList (length);
        
        for (int i = 0; i < length; ++ i)
        {
            final String s = strings [i];
            if (removeNull && (s == null)) continue;
            
            if (_strings.add (s)) _result.add (s);
        }
        
        final int resultLength = _result.size (); 
        if (resultLength == length)
            return strings;
        else
        {
            final String [] result = new String [resultLength];
            _result.toArray (result);
            
            return result; 
        }
    
public static java.lang.StringtoListForm(java.lang.String[] strings, char delimiter)

    
    
    //TODO: add duplicate removal
              
    
        if (strings == null) return null;
        if (strings.length == 0) return "";
        
        final StringBuffer s = new StringBuffer ();
        for (int i = 0, iLimit = strings.length; i < iLimit; ++ i)
        {
            if (i != 0) s.append (delimiter);
            s.append (strings [i]);
        }
        
        return s.toString ();