`
longgangbai
  • 浏览: 7331798 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多
字符串的常用方法总结:

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 = "0123456789abcdef0123456789ABCDEF".indexOf(c);
if (l == -1)
throw new IOException(
"hexadecimal string contains non hex character");
int i1 = (l & 0xf) << 4;
c = s.charAt(j++);
l = "0123456789abcdef0123456789ABCDEF".indexOf(c);
i1 += l & 0xf;
abyte0[k] = (byte) i1;
}

return abyte0;
}

public static String byteToHex(byte abyte0[]) {
int i = abyte0.length;
char ac[] = new char[i * 2];
int j = 0;
int k = 0;
for (; j < i; j++) {
int l = abyte0[j] & 0xff;
ac[k++] = HEXCHAR[l >> 4 & 0xf];
ac[k++] = HEXCHAR[l & 0xf];
}

return new String(ac);
}

public static int unicodeToAscii(OutputStream outputstream, String s,
boolean flag) throws IOException {
int i = 0;
if (s == null || s.length() == 0)
return 0;
int j = s.length();
for (int k = 0; k < j; k++) {
char c = s.charAt(k);
if (c == '\\') {
if (k < j - 1 && s.charAt(k + 1) == 'u') {
outputstream.write(c);
outputstream.write(117);
outputstream.write(48);
outputstream.write(48);
outputstream.write(53);
outputstream.write(99);
i += 6;
} else {
outputstream.write(c);
i++;
}
continue;
}
if (c >= ' ' && c <= '\177') {
outputstream.write(c);
i++;
if (c == '\'' && flag) {
outputstream.write(c);
i++;
}
} else {
outputstream.write(92);
outputstream.write(117);
outputstream.write(HEXCHAR[c >> 12 & 0xf]);
outputstream.write(HEXCHAR[c >> 8 & 0xf]);
outputstream.write(HEXCHAR[c >> 4 & 0xf]);
outputstream.write(HEXCHAR[c & 0xf]);
i += 6;
}
}

return i;
}

public static String asciiToUnicode(byte abyte0[], int i, int j) {
if (j == 0)
return "";
char ac[] = new char[j];
int k = 0;
for (int l = 0; l < j; l++) {
byte byte0 = abyte0[i + l];
if (byte0 == 92 && l < j - 5) {
byte byte1 = abyte0[i + l + 1];
if (byte1 == 117) {
l++;
int i1 = "0123456789abcdef0123456789ABCDEF"
.indexOf(abyte0[i + ++l]) << 12;
i1 += "0123456789abcdef0123456789ABCDEF".indexOf(abyte0[i
+ ++l]) << 8;
i1 += "0123456789abcdef0123456789ABCDEF".indexOf(abyte0[i
+ ++l]) << 4;
i1 += "0123456789abcdef0123456789ABCDEF".indexOf(abyte0[i
+ ++l]);
ac[k++] = (char) i1;
} else {
ac[k++] = (char) byte0;
}
} else {
ac[k++] = (char) byte0;
}
}

return new String(ac, 0, k);
}

public static String asciiToUnicode(String s) {
if (s == null || s.indexOf("\\u") == -1)
return s;
int i = s.length();
char ac[] = new char[i];
int j = 0;
for (int k = 0; k < i; k++) {
char c = s.charAt(k);
if (c == '\\' && k < i - 5) {
char c1 = s.charAt(k + 1);
if (c1 == 'u') {
k++;
int l = "0123456789abcdef0123456789ABCDEF".indexOf(s
.charAt(++k)) << 12;
l += "0123456789abcdef0123456789ABCDEF".indexOf(s
.charAt(++k)) << 8;
l += "0123456789abcdef0123456789ABCDEF".indexOf(s
.charAt(++k)) << 4;
l += "0123456789abcdef0123456789ABCDEF".indexOf(s
.charAt(++k));
ac[j++] = (char) l;
} else {
ac[j++] = c;
}
} else {
ac[j++] = c;
}
}

return new String(ac, 0, j);
}

public static int writeUTF(String s, OutputStream outputstream)
throws IOException {
int i = s.length();
boolean flag = false;
int j = 0;
for (int k = 0; k < i; k++) {
char c = s.charAt(k);
if (c >= '\001' && c <= '\177') {
outputstream.write(c);
j++;
continue;
}
if (c > '\u07FF') {
outputstream.write(0xe0 | c >> 12 & 0xf);
outputstream.write(0x80 | c >> 6 & 0x3f);
outputstream.write(0x80 | c >> 0 & 0x3f);
j += 3;
} else {
outputstream.write(0xc0 | c >> 6 & 0x1f);
outputstream.write(0x80 | c >> 0 & 0x3f);
j += 2;
}
}

return j;
}

public static int getUTFSize(String s) {
int i = s != null ? s.length() : 0;
int j = 0;
for (int k = 0; k < i; k++) {
char c = s.charAt(k);
if (c >= '\001' && c <= '\177') {
j++;
continue;
}
if (c > '\u07FF')
j += 3;
else
j += 2;
}

return j;
}

public static String inputStreamToString(InputStream inputstream, int i)
throws IOException {
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
StringWriter stringwriter = new StringWriter();
char c = '\u2000';
char ac[] = new char[c];
int j = i;
do {
if (j <= 0)
break;
int k = inputstreamreader.read(ac, 0, j <= c ? j : ((int) (c)));
if (k == -1)
break;
stringwriter.write(ac, 0, k);
j -= k;
} while (true);
stringwriter.close();
return stringwriter.toString();
}

public static String toQuotedString(String s, char c, boolean flag) {
if (s == null)
return null;
int i = flag ? count(s, c) : 0;
int j = s.length();
char ac[] = new char[2 + i + j];
int k = 0;
int l = 0;
ac[l++] = c;
for (; k < j; k++) {
char c1 = s.charAt(k);
ac[l++] = c1;
if (flag && c1 == c)
ac[l++] = c1;
}

ac[l] = c;
return new String(ac);
}

static int count(String s, char c) {
int i = 0;
if (s != null) {
int j = s.length();
do {
if (--j < 0)
break;
char c1 = s.charAt(j);
if (c1 == c)
i++;
} while (true);
}
return i;
}

private static final char HEXCHAR[] = { '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

private static final String HEXINDEX = "0123456789abcdef0123456789ABCDEF";

}
分享到:
评论
1 楼 a114d 2012-01-16  
木有注释啊

相关推荐

    Oracle110个常用函数……PDF清晰版

    - **功能**:用于将两个字符串连接成一个字符串。 - **语法**:`CONCAT(string1, string2)` - **示例**:`SELECT CONCAT('Hello', ' World') FROM dual;` - **字符串截取函数 SUBSTR** - **功能**:从指定位置...

    DotNet多年积累的处理类库源码

    这个类库通常会包含各种常用的工具类,如字符串处理、日期时间操作、文件系统交互、网络通信等模块。这些工具类可以大大简化常见的编程任务,避免重复造轮子,使开发者能够专注于业务逻辑。 1. 字符串处理:在...

    2019浦发春招信息科技岗 面试题

    - 分析:此题考查的是应聘者对于字符串的基本操作能力,如字符串的分割、查找等基本功能。需要理解题目的具体要求,并能够运用编程语言实现。 #### 2. 数据转换题目解析 题目要求进行数据转换,例如:“ʱҾתַˡ...

    java从入门到精通(韩顺平视频)笔记整理

    - 字符串类型通常使用`String`类。 - **字符处理**: - 在Java中,字符类型的变量可以存储单个字符,占用2个字节空间。 - 进行算术运算时,字符会被视为其对应的ASCII值。 - **数据类型转换**: - 自动类型...

    python学习资料

    - Python中的字符串是不可变对象,但可以通过切片操作来获取子字符串。 - 示例:`word = 'HelpA'; word[2:4]` 结果为 `'lp'`。 - 切片支持缺省参数,默认情况下,起始位置为0,结束位置为字符串长度。 - 示例:`...

    考试类精品--这个是自己日常改写和积累的python资料:本次资料提供大量的python面试的准备资料,包括常用的p.zip

    【标题】中的“考试类精品--这个是自己日常改写和积累的python资料:本次资料提供大量的python面试的准备资料,包括常用的p.zip”表明这是一个针对Python编程语言的面试准备资源包,其中包含了作者个人整理和改写的...

    Arcgis 常用开发代码

    - `GetConnectionString`:返回数据库连接字符串的方法。 - 封装的`getConn`方法返回一个已经配置好的`OleDbConnection`对象。 ### 总结 以上内容介绍了在ArcGIS开发中涉及到的一些关键技术和知识点,包括C#与...

    php笔记-欢迎增加

    - **定义**:通过定义常量来构建字符串,最终打印出“Hello World”。这种方式可以用于防止脚本被恶意解读或执行。 - 使用`define()`函数定义每个字符或部分字符为常量。 - 通过拼接这些常量来形成完整的“Hello ...

    正则表达式入门经典

    正则表达式是一种特殊的字符序列,用于以字符串的形式描述一定的规则,并通过该规则对字符串进行匹配和查找。它是计算机科学中用于文本处理的一种工具,广泛应用于编程、文本编辑、搜索引擎等领域。正则表达式入门...

    Linux_C编程一站式学习_最终版__带目录的pdf更方便查找与做笔记.pdf

    - **字符串**:探讨字符串的表示方法及常用操作。 - **多维数组**:教授多维数组的定义及使用技巧。 - **第9章:编码风格** - **缩进和空白**:介绍良好的代码缩进习惯。 - **注释**:教授如何合理地添加注释以...

    asp.net常用函数表,本人整理为word格式

    以上只是ASP.NET常用函数表中的一部分,实际的Word文档可能会包含更多细节和示例。学习并熟练掌握这些函数,对于提升ASP.NET开发技能,创建功能丰富的Web应用至关重要。同时,了解如何利用好这些工具,可以极大地...

    angluo-re-315068.pdf

    正则表达式是一种用于模式匹配的强大工具,它使用单个字符串来描述、匹配一系列符合特定规则的字符串。尽管对于初学者来说可能有些难以理解和记忆,但通过不断实践和积累经验,你会逐渐熟练掌握其用法。在实际应用中...

    《郝斌开发经验(java)》.doc

    - **字符串操作**:介绍字符串类的常用方法及其实现技巧。 - **线程**:讲解线程的基本概念、创建方式及线程间的同步问题。 - **GUI编程**:介绍Java Swing库的基础知识及GUI设计原则。 - **输入输出流**:探讨各种...

    Java常用英语

    - **String**(字符串):字符序列的集合。 以上列举的只是Java及其相关领域的一部分常用英语词汇,希望这些基础知识能够帮助初学者更好地理解和掌握编程技巧。随着实践经验的积累,开发者会接触到更多的专业术语和...

    ACM常用模板,需要的下吧

    6. **字符串处理**:如KMP算法、Manacher's Algorithm、Rabin-Karp字符串匹配等,常用于处理字符串相关的题目。 7. **数据结构**:包括链表、栈、队列、堆、树、图、哈希表等。合理的数据结构选择可以极大提升代码...

    MOTOLORLA文件格式转换

    在S19文件转换的上下文中,查找字符串可能用于识别或提取文件中的关键信息,比如程序的入口点、标识符或者版本信息。这通常涉及对文件进行逐字节读取,然后应用某种搜索算法,比如线性搜索或更高效的算法如KMP...

    bomb18的详细解析

    ### bomb18的详细解析 #### 一、概述 本文档将详细介绍bomb18的解析过程及相关的...- 多实践,多总结,积累经验。 - 最后,不要忘记及时记录自己的思考过程和发现的问题,这对于后续的学习和研究都是非常宝贵的资源。

    百度测试开发二面

    - **字符串处理**:掌握字符串的反转算法,理解其背后的逻辑与实现细节。 - **树的遍历**:了解树的深度优先和广度优先遍历,特别是非递归实现树的后序遍历。 - **栈和队列**:利用两个栈实现队列的功能,理解栈...

Global site tag (gtag.js) - Google Analytics