细节的积累 ---字符串的常用方法总结

字符串的常用方法总结:

package cn.com.huawei.opensource.common.lang;

import java.io.*;

public class StringConverter {

public StringConverter() {
}

byte[] stringToFullByteArray(String s) {
int i = s.length();
byte abyte0[] = new byte[i * 2];
for (int j = 0; j < i; j++) {
char c = s.charAt(j);
abyte0[j * 2] = (byte) ((c & 0xff00) >>;
abyte0[j * 2 + 1] = (byte) (c & 0xff);
}

return abyte0;
}

public static byte[] hexToByte(String s) throws IOException {
int i = s.length() / 2;
byte abyte0[] = new byte[i];
int j = 0;
if (s.length() % 2 != 0)
throw new IOException(
"hexadecimal string with odd number of characters");
for (int k = 0; k < i; k++) {
char c = s.charAt(j++);
int l = "0123456789abcdef01234567<wbr>89ABCDEF".indexOf(c);<br> if (l == -1)<br> throw new IOException(<br> "hexadecimal string contains non hex character");<br> int i1 = (l &amp; 0xf) &lt;&lt; 4;<br> c = s.charAt(j++);<br> l = "0123456789abcdef01234567<wbr>89ABCDEF".indexOf(c);<br> i1 += l &amp; 0xf;<br> abyte0[k] = (byte) i1;<br> }<br><br> return abyte0;<br> }<br><br> public static String byteToHex(byte abyte0[]) {<br> int i = abyte0.length;<br> char ac[] = new char[i * 2];<br> int j = 0;<br> int k = 0;<br> for (; j &lt; i; j++) {<br> int l = abyte0[j] &amp; 0xff;<br> ac[k++] = HEXCHAR[l &gt;&gt; 4 &amp; 0xf];<br> ac[k++] = HEXCHAR[l &amp; 0xf];<br> }<br><br> return new String(ac);<br> }<br><br> public static int unicodeToAscii(OutputStream outputstream, String s,<br> boolean flag) throws IOException {<br> int i = 0;<br> if (s == null || s.length() == 0)<br> return 0;<br> int j = s.length();<br> for (int k = 0; k &lt; j; k++) {<br> char c = s.charAt(k);<br> if (c == '\\') {<br> if (k &lt; j - 1 &amp;&amp; s.charAt(k + 1) == 'u') {<br> outputstream.write(c);<br> outputstream.write(117);<br> outputstream.write(48);<br> outputstream.write(48);<br> outputstream.write(53);<br> outputstream.write(99);<br> i += 6;<br> } else {<br> outputstream.write(c);<br> i++;<br> }<br> continue;<br> }<br> if (c &gt;= ' ' &amp;&amp; c &lt;= '\177') {<br> outputstream.write(c);<br> i++;<br> if (c == '\'' &amp;&amp; flag) {<br> outputstream.write(c);<br> i++;<br> }<br> } else {<br> outputstream.write(92);<br> outputstream.write(117);<br> outputstream.write(HEXCHAR[c &gt;&gt; 12 &amp; 0xf]);<br> outputstream.write(HEXCHAR[c &gt;&gt; 8 &amp; 0xf]);<br> outputstream.write(HEXCHAR[c &gt;&gt; 4 &amp; 0xf]);<br> outputstream.write(HEXCHAR[c &amp; 0xf]);<br> i += 6;<br> }<br> }<br><br> return i;<br> }<br><br> public static String asciiToUnicode(byte abyte0[], int i, int j) {<br> if (j == 0)<br> return "";<br> char ac[] = new char[j];<br> int k = 0;<br> for (int l = 0; l &lt; j; l++) {<br> byte byte0 = abyte0[i + l];<br> if (byte0 == 92 &amp;&amp; l &lt; j - 5) {<br> byte byte1 = abyte0[i + l + 1];<br> if (byte1 == 117) {<br> l++;<br> int i1 = "0123456789abcdef01234567<wbr>89ABCDEF"<br> .indexOf(abyte0[i + ++l]) &lt;&lt; 12;<br> i1 += "0123456789abcdef01234567<wbr>89ABCDEF".indexOf(abyte0[i<br> + ++l]) &lt;&lt; 8;<br> i1 += "0123456789abcdef01234567<wbr>89ABCDEF".indexOf(abyte0[i<br> + ++l]) &lt;&lt; 4;<br> i1 += "0123456789abcdef01234567<wbr>89ABCDEF".indexOf(abyte0[i<br> + ++l]);<br> ac[k++] = (char) i1;<br> } else {<br> ac[k++] = (char) byte0;<br> }<br> } else {<br> ac[k++] = (char) byte0;<br> }<br> }<br><br> return new String(ac, 0, k);<br> }<br><br> public static String asciiToUnicode(String s) {<br> if (s == null || s.indexOf("\\u") == -1)<br> return s;<br> int i = s.length();<br> char ac[] = new char[i];<br> int j = 0;<br> for (int k = 0; k &lt; i; k++) {<br> char c = s.charAt(k);<br> if (c == '\\' &amp;&amp; k &lt; i - 5) {<br> char c1 = s.charAt(k + 1);<br> if (c1 == 'u') {<br> k++;<br> int l = "0123456789abcdef01234567<wbr>89ABCDEF".indexOf(s<br> .charAt(++k)) &lt;&lt; 12;<br> l += "0123456789abcdef01234567<wbr>89ABCDEF".indexOf(s<br> .charAt(++k)) &lt;&lt; 8;<br> l += "0123456789abcdef01234567<wbr>89ABCDEF".indexOf(s<br> .charAt(++k)) &lt;&lt; 4;<br> l += "0123456789abcdef01234567<wbr>89ABCDEF".indexOf(s<br> .charAt(++k));<br> ac[j++] = (char) l;<br> } else {<br> ac[j++] = c;<br> }<br> } else {<br> ac[j++] = c;<br> }<br> }<br><br> return new String(ac, 0, j);<br> }<br><br> public static int writeUTF(String s, OutputStream outputstream)<br> throws IOException {<br> int i = s.length();<br> boolean flag = false;<br> int j = 0;<br> for (int k = 0; k &lt; i; k++) {<br> char c = s.charAt(k);<br> if (c &gt;= '\001' &amp;&amp; c &lt;= '\177') {<br> outputstream.write(c);<br> j++;<br> continue;<br> }<br> if (c &gt; '\u07FF') {<br> outputstream.write(0xe0 | c &gt;&gt; 12 &amp; 0xf);<br> outputstream.write(0x80 | c &gt;&gt; 6 &amp; 0x3f);<br> outputstream.write(0x80 | c &gt;&gt; 0 &amp; 0x3f);<br> j += 3;<br> } else {<br> outputstream.write(0xc0 | c &gt;&gt; 6 &amp; 0x1f);<br> outputstream.write(0x80 | c &gt;&gt; 0 &amp; 0x3f);<br> j += 2;<br> }<br> }<br><br> return j;<br> }<br><br> public static int getUTFSize(String s) {<br> int i = s != null ? s.length() : 0;<br> int j = 0;<br> for (int k = 0; k &lt; i; k++) {<br> char c = s.charAt(k);<br> if (c &gt;= '\001' &amp;&amp; c &lt;= '\177') {<br> j++;<br> continue;<br> }<br> if (c &gt; '\u07FF')<br> j += 3;<br> else<br> j += 2;<br> }<br><br> return j;<br> }<br><br> public static String inputStreamToString(InputStream inputstream, int i)<br> throws IOException {<br> InputStreamReader inputstreamreader = new InputStreamReader(inputstream);<br> StringWriter stringwriter = new StringWriter();<br> char c = '\u2000';<br> char ac[] = new char[c];<br> int j = i;<br> do {<br> if (j &lt;= 0)<br> break;<br> int k = inputstreamreader.read(ac, 0, j &lt;= c ? j : ((int) (c)));<br> if (k == -1)<br> break;<br> stringwriter.write(ac, 0, k);<br> j -= k;<br> } while (true);<br> stringwriter.close();<br> return stringwriter.toString();<br> }<br><br> public static String toQuotedString(String s, char c, boolean flag) {<br> if (s == null)<br> return null;<br> int i = flag ? count(s, c) : 0;<br> int j = s.length();<br> char ac[] = new char[2 + i + j];<br> int k = 0;<br> int l = 0;<br> ac[l++] = c;<br> for (; k &lt; j; k++) {<br> char c1 = s.charAt(k);<br> ac[l++] = c1;<br> if (flag &amp;&amp; c1 == c)<br> ac[l++] = c1;<br> }<br><br> ac[l] = c;<br> return new String(ac);<br> }<br><br> static int count(String s, char c) {<br> int i = 0;<br> if (s != null) {<br> int j = s.length();<br> do {<br> if (--j &lt; 0)<br> break;<br> char c1 = s.charAt(j);<br> if (c1 == c)<br> i++;<br> } while (true);<br> }<br> return i;<br> }<br><br> private static final char HEXCHAR[] = { '0', '1', '2', '3', '4', '5', '6',<br> '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };<br><br> private static final String HEXINDEX = "0123456789abcdef01234567<wbr>89ABCDEF";<br><br> }<wbr><br><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值