001 /* 002 * $Id: StringUtil.java 3354 2010-10-23 15:51:37Z kredel $ 003 */ 004 005 package edu.jas.kern; 006 007 008 import java.io.Reader; 009 import java.io.StringWriter; 010 import java.io.IOException; 011 012 013 014 /** 015 * Static String and Reader methods. 016 * @author Heinz Kredel 017 */ 018 019 public class StringUtil { 020 021 022 /** 023 * Parse white space delimited String from Reader. 024 * @param r Reader. 025 * @return next non white space String from r. 026 */ 027 public static String nextString(Reader r) { 028 StringWriter sw = new StringWriter(); 029 try { 030 char buffer; 031 int i; 032 // skip white space 033 while ((i = r.read()) > -1) { 034 buffer = (char) i; 035 if (!Character.isWhitespace(buffer)) { 036 sw.write(buffer); 037 break; 038 } 039 } 040 // read non white space, ignore new lines ? 041 while ((i = r.read()) > -1) { 042 buffer = (char) i; 043 if (Character.isWhitespace(buffer)) { 044 break; 045 } 046 sw.write(buffer); 047 } 048 } catch (IOException e) { 049 e.printStackTrace(); 050 } 051 return sw.toString(); 052 } 053 054 055 /** 056 * Parse String with given delimiter from Reader. 057 * @param c delimiter. 058 * @param r Reader. 059 * @return next String up to c from r. 060 */ 061 public static String nextString(Reader r, char c) { 062 StringWriter sw = new StringWriter(); 063 try { 064 char buffer; 065 int i; 066 // read chars != c, ignore new lines ? 067 while ((i = r.read()) > -1) { 068 buffer = (char) i; 069 if (buffer == c) { 070 break; 071 } 072 sw.write(buffer); 073 } 074 } catch (IOException e) { 075 e.printStackTrace(); 076 } 077 return sw.toString(); 078 } 079 080 081 /** 082 * Parse paired String with given delimiters from Reader. 083 * @param b opposite delimiter. 084 * @param c delimiter. 085 * @param r Reader. 086 * @return next nested matching String up to c from r. 087 */ 088 public static String nextPairedString(Reader r, char b, char c) { 089 StringWriter sw = new StringWriter(); 090 try { 091 int level = 0; 092 char buffer; 093 int i; 094 // read chars != c, ignore new lines ? 095 while ((i = r.read()) > -1) { 096 buffer = (char) i; 097 if (buffer == b) { 098 level++; 099 } 100 if (buffer == c) { 101 level--; 102 if (level < 0) { 103 break; // skip last closing 'brace' 104 } 105 } 106 sw.write(buffer); 107 } 108 } catch (IOException e) { 109 e.printStackTrace(); 110 } 111 return sw.toString(); 112 } 113 114 }