Advertisement
Guest User

Untitled

a guest
Nov 27th, 2011
1,044
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.83 KB | None | 0 0
  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.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement