001 /* Copyright 2000, 2001, Compaq Computer Corporation */ 002 003 package javafe.filespace; 004 005 006 /** Misc. utility functions on Strings */ 007 008 public final class StringUtil { 009 010 /** Remove leading and trailing whitespace (just spaces for now): */ 011 //@ requires s != null; 012 public static String trim_whitespace(String s) { 013 while (s.length()>0 && s.charAt(0)==' ') 014 s = s.substring(1,s.length()); 015 016 while (s.length()>0 && s.charAt(s.length()-1)==' ') 017 s = s.substring(0,s.length()-1); 018 019 return s; 020 } 021 022 023 /** Count the number of times a given character occurs in a String: */ 024 //@ requires s != null; 025 //@ ensures \result>=0; 026 public static int countChar(String s, char c) { 027 int count = 0; 028 int start = 0; 029 030 while ((start = s.indexOf(c, start)+1) != 0) 031 count++; 032 033 return count; 034 } 035 036 037 /** 038 * Print an array of Strings on System.out, one string per 039 * line. Prints "<null>" if list is null. 040 */ 041 //@ requires list != null; 042 public static void printList(String[] list) { 043 if (list == null) { 044 System.out.println("<null>"); 045 return; 046 } 047 048 for (int i=0; i<list.length; i++) 049 System.out.println(list[i]); 050 } 051 052 053 /** 054 * Parse a (possibly empty) separator-separated list into an array of 055 * Strings: 056 */ 057 //@ ensures \nonnullelements(\result); 058 public static String[] parseList(/*@ non_null @*/ String s, char separator) { 059 // Handle empty list case: 060 if (s.equals("")) 061 return new String[0]; 062 063 int items = countChar(s, separator)+1; 064 String[] list = new String[items]; 065 066 int start = 0; 067 //@ loop_invariant (\forall int j; 0<=j && j<i ==> list[j] != null); 068 for (int i = 0; i < items-1 ; i++) { 069 070 int nextSep = s.indexOf(separator, start); 071 //@ assume nextSep != -1; 072 list[i] = s.substring(start, nextSep); 073 start = nextSep + 1; 074 } 075 076 list[items-1] = s.substring(start); 077 078 return list; 079 } 080 081 082 /** A simple test driver */ 083 //@ requires \nonnullelements(args); 084 public static void main(String[] args) { 085 if (args.length != 1) { 086 System.out.println("StringUtil: usage: <cmd> <teststring>"); 087 return; 088 } 089 System.out.println("Testing using '" + args[0] + "':"); 090 System.out.println(); 091 092 // Test trim_whitespace: 093 System.out.println("Removing whitespace yields '" + 094 trim_whitespace(args[0])+ "'"); 095 System.out.println(); 096 097 // Test countChar: 098 System.out.println("# of commas occuring = " + 099 countChar(args[0], ',')); 100 System.out.println(); 101 102 // Test countChar: 103 System.out.println("List elements are: "); 104 printList(parseList(args[0], ',')); 105 System.out.println("(EOL)"); 106 } 107 }