home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 November / PCO1197.ISO / FilesBBS / WIN95 / NET_COM / N32E403.EXE / nav40l.z / java40.jar / java / lang / String.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-09-04  |  7.4 KB  |  665 lines

  1. package java.lang;
  2.  
  3. import java.io.CharConversionException;
  4. import java.io.Serializable;
  5. import java.io.UnsupportedEncodingException;
  6. import java.util.Locale;
  7. import sun.io.ByteToCharConverter;
  8. import sun.io.CharToByteConverter;
  9.  
  10. public final class String implements Serializable {
  11.    private char[] value;
  12.    private int offset;
  13.    private int count;
  14.    private static final long serialVersionUID = -6849794470754667710L;
  15.  
  16.    public String() {
  17.       this.value = new char[0];
  18.    }
  19.  
  20.    public String(String var1) {
  21.       this.count = var1.length();
  22.       this.value = new char[this.count];
  23.       var1.getChars(0, this.count, this.value, 0);
  24.    }
  25.  
  26.    public String(char[] var1) {
  27.       this.count = var1.length;
  28.       this.value = new char[this.count];
  29.       System.arraycopy(var1, 0, this.value, 0, this.count);
  30.    }
  31.  
  32.    public String(char[] var1, int var2, int var3) {
  33.       if (var2 < 0) {
  34.          throw new StringIndexOutOfBoundsException(var2);
  35.       } else if (var3 < 0) {
  36.          throw new StringIndexOutOfBoundsException(var3);
  37.       } else if (var2 > var1.length - var3) {
  38.          throw new StringIndexOutOfBoundsException(var2 + var3);
  39.       } else {
  40.          this.value = new char[var3];
  41.          this.count = var3;
  42.          System.arraycopy(var1, var2, this.value, 0, var3);
  43.       }
  44.    }
  45.  
  46.    public String(byte[] var1, int var2, int var3, int var4) {
  47.       if (var3 < 0) {
  48.          throw new StringIndexOutOfBoundsException(var3);
  49.       } else if (var4 < 0) {
  50.          throw new StringIndexOutOfBoundsException(var4);
  51.       } else if (var3 > var1.length - var4) {
  52.          throw new StringIndexOutOfBoundsException(var3 + var4);
  53.       } else {
  54.          char[] var5 = new char[var4];
  55.          this.count = var4;
  56.          this.value = var5;
  57.          if (var2 == 0) {
  58.             for(int var8 = var4; var8-- > 0; var5[var8] = (char)(var1[var8 + var3] & 255)) {
  59.             }
  60.  
  61.          } else {
  62.             var2 <<= 8;
  63.  
  64.             for(int var6 = var4; var6-- > 0; var5[var6] = (char)(var2 | var1[var6 + var3] & 255)) {
  65.             }
  66.  
  67.          }
  68.       }
  69.    }
  70.  
  71.    public String(byte[] var1, int var2) {
  72.       this(var1, var2, 0, var1.length);
  73.    }
  74.  
  75.    private String(byte[] var1, int var2, int var3, ByteToCharConverter var4) {
  76.       int var5 = var4.getMaxCharsPerByte() * var3;
  77.       this.value = new char[var5];
  78.  
  79.       try {
  80.          this.count = var4.convert(var1, var2, var2 + var3, this.value, 0, var5);
  81.          this.count += var4.flush(this.value, var4.nextCharIndex(), var5);
  82.       } catch (CharConversionException var7) {
  83.          this.count = var4.nextCharIndex();
  84.       }
  85.  
  86.       if (this.count < var5) {
  87.          char[] var6 = new char[this.count];
  88.          System.arraycopy(this.value, 0, var6, 0, this.count);
  89.          this.value = var6;
  90.       }
  91.  
  92.    }
  93.  
  94.    public String(byte[] var1, int var2, int var3, String var4) throws UnsupportedEncodingException {
  95.       this(var1, var2, var3, ByteToCharConverter.getConverter(var4));
  96.    }
  97.  
  98.    public String(byte[] var1, String var2) throws UnsupportedEncodingException {
  99.       this(var1, 0, var1.length, (String)var2);
  100.    }
  101.  
  102.    public String(byte[] var1, int var2, int var3) {
  103.       this(var1, var2, var3, ByteToCharConverter.getDefault());
  104.    }
  105.  
  106.    public String(byte[] var1) {
  107.       this(var1, 0, var1.length, (ByteToCharConverter)ByteToCharConverter.getDefault());
  108.    }
  109.  
  110.    public String(StringBuffer var1) {
  111.       synchronized(var1){}
  112.  
  113.       try {
  114.          var1.setShared();
  115.          this.value = var1.getValue();
  116.          this.offset = 0;
  117.          this.count = var1.length();
  118.       } catch (Throwable var4) {
  119.          throw var4;
  120.       }
  121.  
  122.    }
  123.  
  124.    private String(int var1, int var2, char[] var3) {
  125.       this.value = var3;
  126.       this.offset = var1;
  127.       this.count = var2;
  128.    }
  129.  
  130.    public int length() {
  131.       return this.count;
  132.    }
  133.  
  134.    public char charAt(int var1) {
  135.       if (var1 >= 0 && var1 < this.count) {
  136.          return this.value[var1 + this.offset];
  137.       } else {
  138.          throw new StringIndexOutOfBoundsException(var1);
  139.       }
  140.    }
  141.  
  142.    public void getChars(int var1, int var2, char[] var3, int var4) {
  143.       if (var1 < 0) {
  144.          throw new StringIndexOutOfBoundsException(var1);
  145.       } else if (var2 > this.count) {
  146.          throw new StringIndexOutOfBoundsException(var2);
  147.       } else if (var1 > var2) {
  148.          throw new StringIndexOutOfBoundsException(var2 - var1);
  149.       } else {
  150.          System.arraycopy(this.value, this.offset + var1, var3, var4, var2 - var1);
  151.       }
  152.    }
  153.  
  154.    public void getBytes(int var1, int var2, byte[] var3, int var4) {
  155.       if (var1 < 0) {
  156.          throw new StringIndexOutOfBoundsException(var1);
  157.       } else if (var2 > this.count) {
  158.          throw new StringIndexOutOfBoundsException(var2);
  159.       } else if (var1 > var2) {
  160.          throw new StringIndexOutOfBoundsException(var2 - var1);
  161.       } else {
  162.          int var5 = var4;
  163.          int var6 = this.offset + var2;
  164.  
  165.          for(int var7 = this.offset + var1; var7 < var6; var3[var5++] = (byte)this.value[var7++]) {
  166.          }
  167.  
  168.       }
  169.    }
  170.  
  171.    private byte[] getBytes(CharToByteConverter var1) {
  172.       var1.reset();
  173.       int var2 = var1.getMaxBytesPerChar() * this.count;
  174.       byte[] var3 = new byte[var2];
  175.  
  176.       int var4;
  177.       try {
  178.          var4 = var1.convert(this.value, this.offset, this.offset + this.count, var3, 0, var2);
  179.          var4 += var1.flush(var3, var1.nextByteIndex(), var2);
  180.       } catch (CharConversionException var6) {
  181.          var4 = var1.nextByteIndex();
  182.       }
  183.  
  184.       if (var4 < var2) {
  185.          byte[] var5 = new byte[var4];
  186.          System.arraycopy(var3, 0, var5, 0, var4);
  187.          return var5;
  188.       } else {
  189.          return var3;
  190.       }
  191.    }
  192.  
  193.    public byte[] getBytes(String var1) throws UnsupportedEncodingException {
  194.       return this.getBytes(CharToByteConverter.getConverter(var1));
  195.    }
  196.  
  197.    public byte[] getBytes() {
  198.       return this.getBytes(CharToByteConverter.getDefault());
  199.    }
  200.  
  201.    public boolean equals(Object var1) {
  202.       if (var1 != null && var1 instanceof String) {
  203.          String var2 = (String)var1;
  204.          int var3 = this.count;
  205.          if (var3 == var2.count) {
  206.             char[] var4 = this.value;
  207.             char[] var5 = var2.value;
  208.             int var6 = this.offset;
  209.             int var7 = var2.offset;
  210.  
  211.             while(var3-- != 0) {
  212.                if (var4[var6++] != var5[var7++]) {
  213.                   return false;
  214.                }
  215.             }
  216.  
  217.             return true;
  218.          }
  219.       }
  220.  
  221.       return false;
  222.    }
  223.  
  224.    public boolean equalsIgnoreCase(String var1) {
  225.       return var1 != null && var1.count == this.count && this.regionMatches(true, 0, var1, 0, this.count);
  226.    }
  227.  
  228.    public int compareTo(String var1) {
  229.       int var2 = this.count;
  230.       int var3 = var1.count;
  231.       int var4 = Math.min(var2, var3);
  232.       char[] var5 = this.value;
  233.       char[] var6 = var1.value;
  234.       int var7 = this.offset;
  235.       int var8 = var1.offset;
  236.  
  237.       while(var4-- != 0) {
  238.          char var9 = var5[var7++];
  239.          char var10 = var6[var8++];
  240.          if (var9 != var10) {
  241.             return var9 - var10;
  242.          }
  243.       }
  244.  
  245.       return var2 - var3;
  246.    }
  247.  
  248.    public boolean regionMatches(int var1, String var2, int var3, int var4) {
  249.       char[] var5 = this.value;
  250.       int var6 = this.offset + var1;
  251.       char[] var7 = var2.value;
  252.       int var8 = var2.offset + var3;
  253.       if (var3 >= 0 && var1 >= 0 && var1 <= this.count - var4 && var3 <= var2.count - var4) {
  254.          while(var4-- > 0) {
  255.             if (var5[var6++] != var7[var8++]) {
  256.                return false;
  257.             }
  258.          }
  259.  
  260.          return true;
  261.       } else {
  262.          return false;
  263.       }
  264.    }
  265.  
  266.    public boolean regionMatches(boolean var1, int var2, String var3, int var4, int var5) {
  267.       char[] var6 = this.value;
  268.       int var7 = this.offset + var2;
  269.       char[] var8 = var3.value;
  270.       int var9 = var3.offset + var4;
  271.       if (var4 >= 0 && var2 >= 0 && var2 <= this.count - var5 && var4 <= var3.count - var5) {
  272.          while(true) {
  273.             if (var5-- <= 0) {
  274.                return true;
  275.             }
  276.  
  277.             char var10 = var6[var7++];
  278.             char var11 = var8[var9++];
  279.             if (var10 != var11) {
  280.                if (!var1) {
  281.                   break;
  282.                }
  283.  
  284.                char var12 = Character.toUpperCase(var10);
  285.                char var13 = Character.toUpperCase(var11);
  286.                if (var12 != var13 && Character.toLowerCase(var12) != Character.toLowerCase(var13)) {
  287.                   break;
  288.                }
  289.             }
  290.          }
  291.  
  292.          return false;
  293.       } else {
  294.          return false;
  295.       }
  296.    }
  297.  
  298.    public boolean startsWith(String var1, int var2) {
  299.       char[] var3 = this.value;
  300.       int var4 = this.offset + var2;
  301.       char[] var5 = var1.value;
  302.       int var6 = var1.offset;
  303.       int var7 = var1.count;
  304.       if (var2 >= 0 && var2 <= this.count - var7) {
  305.          do {
  306.             --var7;
  307.             if (var7 < 0) {
  308.                return true;
  309.             }
  310.          } while(var3[var4++] == var5[var6++]);
  311.  
  312.          return false;
  313.       } else {
  314.          return false;
  315.       }
  316.    }
  317.  
  318.    public boolean startsWith(String var1) {
  319.       return this.startsWith(var1, 0);
  320.    }
  321.  
  322.    public boolean endsWith(String var1) {
  323.       return this.startsWith(var1, this.count - var1.count);
  324.    }
  325.  
  326.    public int hashCode() {
  327.       int var1 = 0;
  328.       int var2 = this.offset;
  329.       char[] var3 = this.value;
  330.       int var4 = this.count;
  331.       if (var4 < 16) {
  332.          for(int var5 = var4; var5 > 0; --var5) {
  333.             var1 = var1 * 37 + var3[var2++];
  334.          }
  335.       } else {
  336.          int var7 = var4 / 8;
  337.  
  338.          for(int var6 = var4; var6 > 0; var2 += var7) {
  339.             var1 = var1 * 39 + var3[var2];
  340.             var6 -= var7;
  341.          }
  342.       }
  343.  
  344.       return var1;
  345.    }
  346.  
  347.    public int indexOf(int var1) {
  348.       return this.indexOf(var1, 0);
  349.    }
  350.  
  351.    public int indexOf(int var1, int var2) {
  352.       int var3 = this.offset + this.count;
  353.       char[] var4 = this.value;
  354.       if (var2 < 0) {
  355.          var2 = 0;
  356.       } else if (var2 >= this.count) {
  357.          return -1;
  358.       }
  359.  
  360.       for(int var5 = this.offset + var2; var5 < var3; ++var5) {
  361.          if (var4[var5] == var1) {
  362.             return var5 - this.offset;
  363.          }
  364.       }
  365.  
  366.       return -1;
  367.    }
  368.  
  369.    public int lastIndexOf(int var1) {
  370.       return this.lastIndexOf(var1, this.count - 1);
  371.    }
  372.  
  373.    public int lastIndexOf(int var1, int var2) {
  374.       int var3 = this.offset;
  375.       char[] var4 = this.value;
  376.  
  377.       for(int var5 = this.offset + (var2 >= this.count ? this.count - 1 : var2); var5 >= var3; --var5) {
  378.          if (var4[var5] == var1) {
  379.             return var5 - this.offset;
  380.          }
  381.       }
  382.  
  383.       return -1;
  384.    }
  385.  
  386.    public int indexOf(String var1) {
  387.       return this.indexOf(var1, 0);
  388.    }
  389.  
  390.    public int indexOf(String var1, int var2) {
  391.       char[] var3 = this.value;
  392.       char[] var4 = var1.value;
  393.       int var5 = this.offset + (this.count - var1.count);
  394.       if (var2 < 0) {
  395.          var2 = 0;
  396.       } else if (var2 >= this.count) {
  397.          return -1;
  398.       }
  399.  
  400.       int var6 = this.offset + (var2 < 0 ? 0 : var2);
  401.  
  402.       label33:
  403.       while(var6 <= var5) {
  404.          int var7 = var1.count;
  405.          int var8 = var6;
  406.          int var9 = var1.offset;
  407.  
  408.          while(var7-- != 0) {
  409.             if (var3[var8++] != var4[var9++]) {
  410.                ++var6;
  411.                continue label33;
  412.             }
  413.          }
  414.  
  415.          return var6 - this.offset;
  416.       }
  417.  
  418.       return -1;
  419.    }
  420.  
  421.    public int lastIndexOf(String var1) {
  422.       return this.lastIndexOf(var1, this.count);
  423.    }
  424.  
  425.    public int lastIndexOf(String var1, int var2) {
  426.       if (var2 < 0) {
  427.          return -1;
  428.       } else {
  429.          if (var2 > this.count - var1.count) {
  430.             var2 = this.count - var1.count;
  431.          }
  432.  
  433.          if (var1.count == 0) {
  434.             return var2;
  435.          } else {
  436.             char[] var3 = this.value;
  437.             char[] var4 = var1.value;
  438.  
  439.             for(int var5 = this.offset + var2; var5 >= this.offset; --var5) {
  440.                int var6 = var1.count;
  441.                int var7 = var5;
  442.                int var8 = var1.offset;
  443.  
  444.                while(var3[var7++] == var4[var8++]) {
  445.                   --var6;
  446.                   if (var6 <= 0) {
  447.                      return var5 - this.offset;
  448.                   }
  449.                }
  450.             }
  451.  
  452.             return -1;
  453.          }
  454.       }
  455.    }
  456.  
  457.    public String substring(int var1) {
  458.       return this.substring(var1, this.length());
  459.    }
  460.  
  461.    public String substring(int var1, int var2) {
  462.       if (var1 < 0) {
  463.          throw new StringIndexOutOfBoundsException(var1);
  464.       } else if (var2 > this.count) {
  465.          throw new StringIndexOutOfBoundsException(var2);
  466.       } else if (var1 > var2) {
  467.          throw new StringIndexOutOfBoundsException(var2 - var1);
  468.       } else {
  469.          return var1 == 0 && var2 == this.count ? this : new String(this.offset + var1, var2 - var1, this.value);
  470.       }
  471.    }
  472.  
  473.    public String concat(String var1) {
  474.       int var2 = var1.length();
  475.       if (var2 == 0) {
  476.          return this;
  477.       } else {
  478.          char[] var3 = new char[this.count + var2];
  479.          this.getChars(0, this.count, var3, 0);
  480.          var1.getChars(0, var2, var3, this.count);
  481.          return new String(0, this.count + var2, var3);
  482.       }
  483.    }
  484.  
  485.    public String replace(char var1, char var2) {
  486.       if (var1 != var2) {
  487.          int var3 = this.count;
  488.          int var4 = -1;
  489.  
  490.          do {
  491.             ++var4;
  492.          } while(var4 < var3 && this.value[this.offset + var4] != var1);
  493.  
  494.          if (var4 < var3) {
  495.             char[] var5 = new char[var3];
  496.  
  497.             for(int var6 = 0; var6 < var4; ++var6) {
  498.                var5[var6] = this.value[this.offset + var6];
  499.             }
  500.  
  501.             while(var4 < var3) {
  502.                char var7 = this.value[this.offset + var4];
  503.                var5[var4] = var7 == var1 ? var2 : var7;
  504.                ++var4;
  505.             }
  506.  
  507.             return new String(0, var3, var5);
  508.          }
  509.       }
  510.  
  511.       return this;
  512.    }
  513.  
  514.    public String toLowerCase(Locale var1) {
  515.       StringBuffer var2 = new StringBuffer();
  516.       int var4 = this.count;
  517.       if (var1.getLanguage().equals("tr")) {
  518.          for(int var3 = 0; var3 < var4; ++var3) {
  519.             char var5 = this.value[this.offset + var3];
  520.             if (var5 == 'I') {
  521.                var2.append('─▒');
  522.             } else if (var5 == 304) {
  523.                var2.append('i');
  524.             } else {
  525.                var2.append(Character.toLowerCase(var5));
  526.             }
  527.          }
  528.       } else {
  529.          for(int var6 = 0; var6 < var4; ++var6) {
  530.             var2.append(Character.toLowerCase(this.value[this.offset + var6]));
  531.          }
  532.       }
  533.  
  534.       return var2.toString();
  535.    }
  536.  
  537.    public String toLowerCase() {
  538.       return this.toLowerCase(Locale.getDefault());
  539.    }
  540.  
  541.    public String toUpperCase(Locale var1) {
  542.       StringBuffer var2 = new StringBuffer();
  543.       int var4 = this.count;
  544.       if (var1.getLanguage().equals("tr")) {
  545.          for(int var3 = 0; var3 < var4; ++var3) {
  546.             char var5 = this.value[this.offset + var3];
  547.             if (var5 == 'i') {
  548.                var2.append('─░');
  549.             } else if (var5 == 305) {
  550.                var2.append('I');
  551.             } else if (var5 == 223) {
  552.                var2.append("SS");
  553.             } else {
  554.                var2.append(Character.toUpperCase(var5));
  555.             }
  556.          }
  557.       } else {
  558.          for(int var6 = 0; var6 < var4; ++var6) {
  559.             char var7 = this.value[this.offset + var6];
  560.             if (var7 == 223) {
  561.                var2.append("SS");
  562.             } else {
  563.                var2.append(Character.toUpperCase(var7));
  564.             }
  565.          }
  566.       }
  567.  
  568.       return var2.toString();
  569.    }
  570.  
  571.    public String toUpperCase() {
  572.       return this.toUpperCase(Locale.getDefault());
  573.    }
  574.  
  575.    public String trim() {
  576.       int var1 = this.count;
  577.  
  578.       int var2;
  579.       for(var2 = 0; var2 < var1 && this.value[this.offset + var2] <= ' '; ++var2) {
  580.       }
  581.  
  582.       while(var2 < var1 && this.value[this.offset + var1 - 1] <= ' ') {
  583.          --var1;
  584.       }
  585.  
  586.       return var2 <= 0 && var1 >= this.count ? this : this.substring(var2, var1);
  587.    }
  588.  
  589.    public String toString() {
  590.       return this;
  591.    }
  592.  
  593.    public char[] toCharArray() {
  594.       int var1 = this.length();
  595.       char[] var2 = new char[var1];
  596.       this.getChars(0, var1, var2, 0);
  597.       return var2;
  598.    }
  599.  
  600.    public static String valueOf(Object var0) {
  601.       return var0 == null ? "null" : var0.toString();
  602.    }
  603.  
  604.    public static String valueOf(char[] var0) {
  605.       return new String(var0);
  606.    }
  607.  
  608.    public static String valueOf(char[] var0, int var1, int var2) {
  609.       return new String(var0, var1, var2);
  610.    }
  611.  
  612.    public static String copyValueOf(char[] var0, int var1, int var2) {
  613.       return new String(var0, var1, var2);
  614.    }
  615.  
  616.    public static String copyValueOf(char[] var0) {
  617.       return copyValueOf(var0, 0, var0.length);
  618.    }
  619.  
  620.    public static String valueOf(boolean var0) {
  621.       return var0 ? "true" : "false";
  622.    }
  623.  
  624.    public static String valueOf(char var0) {
  625.       char[] var1 = new char[]{var0};
  626.       return new String(0, 1, var1);
  627.    }
  628.  
  629.    public static String valueOf(int var0) {
  630.       return Integer.toString(var0, 10);
  631.    }
  632.  
  633.    public static String valueOf(long var0) {
  634.       return Long.toString(var0, 10);
  635.    }
  636.  
  637.    public static String valueOf(float var0) {
  638.       return Float.toString(var0);
  639.    }
  640.  
  641.    public static String valueOf(double var0) {
  642.       return Double.toString(var0);
  643.    }
  644.  
  645.    public native String intern();
  646.  
  647.    int utfLength() {
  648.       int var1 = this.offset + this.count;
  649.       int var2 = 0;
  650.  
  651.       for(int var3 = this.offset; var3 < var1; ++var3) {
  652.          char var4 = this.value[var3];
  653.          if (var4 >= 1 && var4 <= 127) {
  654.             ++var2;
  655.          } else if (var4 > 2047) {
  656.             var2 += 3;
  657.          } else {
  658.             var2 += 2;
  659.          }
  660.       }
  661.  
  662.       return var2;
  663.    }
  664. }
  665.