Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Nov 27th, 2011  |  syntax: Java  |  size: 1.83 KB  |  views: 272  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. public final class GFStringBuilder
  2. {
  3.         private final char[] result;
  4.         private String format;
  5.         private int formatCursor;
  6.         private int resultCursor;
  7.        
  8.         private static GFStringBuilder inst = new GFStringBuilder(1024);
  9.        
  10.         private GFStringBuilder(int capacity)
  11.         {
  12.                 result = new char[capacity];
  13.         }
  14.        
  15.         // Startet die Formatierung mit einem Format-String.
  16.         public static GFStringBuilder format(String format)
  17.         {
  18.                 inst.format = format;
  19.                 inst.formatCursor = 0;
  20.                 inst.resultCursor = 0;
  21.                 return inst;
  22.         }
  23.        
  24.         // Ersetzt den nächsten Platzhalter durch einen Integer.
  25.         public GFStringBuilder eat(int value)
  26.         {
  27.                 moveToNextPlaceholder();
  28.                
  29.                 if (value < 0)
  30.                 {
  31.                         result[resultCursor++] = '-';
  32.                         value = -value;
  33.                 }
  34.                 else if (value == 0)
  35.                 {
  36.                         result[resultCursor++] = '0';
  37.                         return inst;
  38.                 }
  39.                
  40.                 // Integer in Text umwandeln.
  41.                 int t = 1000000000;
  42.                 while (value <= t) t /= 10;
  43.                 while (t > 0)
  44.                 {
  45.                         int d = value / t;
  46.                         result[resultCursor++] = (char)('0' + d);
  47.                         value -= d * t;
  48.                         t /= 10;
  49.                 }
  50.                
  51.                 return inst;
  52.         }
  53.        
  54.         // Ersetzt den nächsten Platzhalter durch einen String.
  55.         public GFStringBuilder eat(char[] seq)
  56.         {
  57.                 moveToNextPlaceholder();
  58.                
  59.                 for (int i = 0; seq[i] != 0 && i < seq.length; ++i) result[resultCursor++] = seq[i];
  60.                 return inst;
  61.         }
  62.        
  63.         // Ersetzt den nächsten Platzhalter durch einen String.
  64.         public GFStringBuilder eat(String str)
  65.         {
  66.                 moveToNextPlaceholder();
  67.                
  68.                 int length = str.length();
  69.                 for (int i = 0; i < length; ++i) result[resultCursor++] = str.charAt(i);
  70.                 return inst;
  71.         }
  72.        
  73.         // Liefert den finalen String.
  74.         public char[] get()
  75.         {
  76.                 result[resultCursor] = 0;
  77.                 return result;
  78.         }
  79.        
  80.         private void moveToNextPlaceholder()
  81.         {
  82.                 while (true)
  83.                 {
  84.                         char c = format.charAt(formatCursor++);
  85.                         if (c == '%') break;
  86.                         result[resultCursor++] = c;
  87.                 }
  88.         }
  89. }
  90.