关于ASCII码转换,一个简单而又复杂的问题

njallenwang 2006-10-20 10:22:17
String ss1 = "aa\58bb"
希望经过转换为
String ss2 = "aa:bb"

搜索'\'和'\\'是没有用的,怎么办呢??
...全文
317 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
njallenwang 2006-10-30
  • 打赏
  • 举报
回复
好使,非常感谢gzpoplar!
gzpoplar 2006-10-20
  • 打赏
  • 举报
回复
注意这里:
String src = "aa\\58bb234\\40\\47aaa";
^^ ^^ ^^
原字符串里面的\必须再加上一个\,否则就成转意符了。
gzpoplar 2006-10-20
  • 打赏
  • 举报
回复
try {
String strpattern = "\\\\([0-9]{1,3})";
String src = "aa\\58bb234\\40\\47aaa";
String desc = "";

Pattern p = Pattern.compile(strpattern);
String[] ss = p.split(src);
int num = ss.length;
String[] asc = new String[num];
Matcher m = p.matcher(src);
int i = 1;
while(m.find()) {
asc[i] = dec2asc(m.group(1));
i++;
}

for (i=0; i<num; i++) {
if (i==0) {
desc += ss[i];
} else {
desc += asc[i] + ss[i];
}
}

System.out.println("'" + src + "'");
System.out.println("'" + desc + "'");
}
catch(Exception exception)
{
exception.printStackTrace();
}

static String dec2asc(String dec) {
String result = "";
try {
int d = Integer.parseInt(dec);
char c = (char)(d & 255);
result += c;
}
catch(Exception ex)
{
ex.printStackTrace();
}
return result;
}
gzpoplar 2006-10-20
  • 打赏
  • 举报
回复
晕啊,那你上面没有说啊!
关键是什么换成什么?
明白了,等一会儿
njallenwang 2006-10-20
  • 打赏
  • 举报
回复
楼上的这个不错,不过还没达到我的目的,
我举\58只是一个例子,还有其他ASCII码,我的要求是

src = "aa\58bb\44cc"
转化为:
dest = "aa:58,cc"


gzpoplar 2006-10-20
  • 打赏
  • 举报
回复
String src = "aa\58bb2345seiljlvc#*(&)sjkdlf;a*(&)#dfae8932";
String desc = src.replaceAll("[^a-zA-Z]+", ":");

System.out.println("'" + src + "'");
System.out.println("'" + desc + "'");
hhl417 2006-10-20
  • 打赏
  • 举报
回复
\ 是转义字符,你当然搜索不到了,你上面的字符 \和5连才有意义,搜"\5",就可以搜索得到,至于转换,楼上的方法就可以了
jspxnet 2006-10-20
  • 打赏
  • 举报
回复
如果你只是替换的话

String ss1 = "aa\58bb";
System.out.println(ss1.replace("\58",":"));
gzpoplar 2006-10-20
  • 打赏
  • 举报
回复
public static void main(String[] args) {

try {
String strpattern = "\\\\([0-9]{1,3})";
String src = "aa\\58bb234\\40\\47aaa";
byte[] cs = src.getBytes(); //这里跟你拿到的串一样
src = "";
for (int i=0; i<cs.length; i++) {
if (cs[i] == '\\') {
src += "\\";
} else {
src += (char)cs[i];
}
}
String desc = "";
Pattern p = Pattern.compile(strpattern);
String[] ss = p.split(src);
int num = ss.length;
String[] asc = new String[num];
Matcher m = p.matcher(src);
int i = 1;
while(m.find()) {
asc[i] = dec2asc(m.group(1));
i++;
}

for (i=0; i<num; i++) {
if (i==0) {
desc += ss[i];
} else {
desc += asc[i] + ss[i];
}
}

System.out.println("'" + src + "'");
System.out.println("'" + desc + "'");
}
catch(Exception exception)
{
exception.printStackTrace();
}
}
static String dec2asc(String dec) {
String result = "";
try {
int d = Integer.parseInt(dec);
char c = (char)(d & 255);
result += c;
}
catch(Exception ex)
{
ex.printStackTrace();
}
return result;
}
}
如何?
gzpoplar 2006-10-20
  • 打赏
  • 举报
回复
那你就不要用String,char[]或int[]
可以用循环转成String,然后用上面的方法转换
或者直接在char或int数组循环取出相应的ascii数值,直接转换,见上面的dec2asc程序。
njallenwang 2006-10-20
  • 打赏
  • 举报
回复
多谢poplar兄,
可是我现在的情况是从设备上取回的信息就是
String src = "aa\58bb234\40\47aaa";

郁闷啊

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧