要转码的内容:
\u53EF\u4E58\u516C\u4EA4758\u8DEF\u3001358\u652F\u8DEF\u3001858\u8DEF\u3001849\u8DEF\u3001984\u8DEF\u3001985\u8DEF\u3001850\u8DEF\u3001426\u8DEF\u3001464\u8DEF\u3001465\u8DEF\u3001803\u8DEF\u5230\u5929\u901A\u82D1\u4E0B\u8F66\u5F80\u56DE\u8D7050\u7C73\uFF0C\u5411\u897F\u5230\u57CE\u94C1\u4E94\u53F7\u7EBF\u4E0B\u9762\u5411\u5317200-300\u7C73\u5373\u5230\uFF0C\u6216\u4E3D\u6C34\u56ED\u4E0B\u8F66\u7A7F\u8FC7\u5929\u901A\u82D1\u4E94\u533A\u5230\u57CE\u94C1\u4E94\u53F7\u7EBF\u4E0B\u9762\u5411\u5357150-250\u7C73\u5373\u5230\uFF1B\u4E58\u5730\u94C1\u4E94\u53F7\u7EBF\u5230\u5929\u901A\u82D1\u5357\u7AD9\u4E0B\u8F66\uFF0C\u51FA\u7AD9\u5F80\u5357\u8D70\u5357300-400\u7C73\u5373\u5230\uFF1B\u7531\u5317\u5411\u5357758\u8DEF\u3001358\u652F\u3001858\u8DEF\u3001849\u8DEF\u3001984\u8DEF\u3001985\u8DEF\u3001850\u8DEF\u3001426\u8DEF\u3001464\u8DEF\u3001465\u8DEF\u3001803\u8DEF\u3001\u5730\u94C1\u4E94\u53F7\u7EBF\u5230\u5929\u901A\u82D1\u5357\u7AD9\u4E0B\u8F66\u5F80\u5357\u8D70\u5357300-400\u7C73\u5373\u5230\u3002\r\n
麻烦我想问下 有没有什么好的转码方式可以转出我要的结果
结果是这样的:
可乘公交758路、358支路、858路、849路、984路、985路、850路、426路、464路、465路、803路到天通苑下车往回走50米,向西到城铁五号线下面向北200-300米即到,或丽水园下车穿过天通苑五区到城铁五号线下面向南150-250米即到;乘地铁五号线到天通苑南站下车,出站往南走南300-400米即到;由北向南758路、358支、858路、849路、984路、985路、850路、426路、464路、465路、803路、地铁五号线到天通苑南站下车往南走南300-400米即到。
我的转码代码是:
private static String decodeUnicode(String dataStr) {
int start = 0;
int end = 0;
final StringBuffer buffer = new StringBuffer();
while( start > -1 ) {
end = dataStr.indexOf( "\\u", start + 2 );
String charStr = "";
if( end == -1 ) {
charStr = dataStr.substring( start + 2, dataStr.length() );
} else {
charStr = dataStr.substring( start + 2, end);
}
char letter = (char) Integer.parseInt( charStr, 16 );
buffer.append( new Character( letter ).toString() );
start = end;
}
return buffer.toString();
}
我这样转, 转到\u5317200-300 这个位置就报错了
我新手 没多少分请大虾们多多包含 这是我在控制台打出的内容:
改变前===="\u5317\u4EAC\u5E02\u660C\u5E73\u533A\u4E1C\u5C0F\u53E3\u9547\u4E2D\u6EE9\u6751"
改变后====北京市昌平区东小口镇中滩村
改变前===="\u53EF\u4E58\u516C\u4EA4758\u8DEF\u3001358\u652F\u8DEF\u3001858\u8DEF\u3001849\u8DEF\u3001984\u8DEF\u3001985\u8DEF\u3001850\u8DEF\u3001426\u8DEF\u3001464\u8DEF\u3001465\u8DEF\u3001803\u8DEF\u5230\u5929\u901A\u82D1\u4E0B\u8F66\u5F80\u56DE\u8D7050\u7C73\uFF0C\u5411\u897F\u5230\u57CE\u94C1\u4E94\u53F7\u7EBF\u4E0B\u9762\u5411\u5317200-300\u7C73\u5373\u5230\uFF0C\u6216\u4E3D\u6C34\u56ED\u4E0B\u8F66\u7A7F\u8FC7\u5929\u901A\u82D1\u4E94\u533A\u5230\u57CE\u94C1\u4E94\u53F7\u7EBF\u4E0B\u9762\u5411\u5357150-250\u7C73\u5373\u5230\uFF1B\u4E58\u5730\u94C1\u4E94\u53F7\u7EBF\u5230\u5929\u901A\u82D1\u5357\u7AD9\u4E0B\u8F66\uFF0C\u51FA\u7AD9\u5F80\u5357\u8D70\u5357300-400\u7C73\u5373\u5230\uFF1B\u7531\u5317\u5411\u5357758\u8DEF\u3001358\u652F\u3001858\u8DEF\u3001849\u8DEF\u3001984\u8DEF\u3001985\u8DEF\u3001850\u8DEF\u3001426\u8DEF\u3001464\u8DEF\u3001465\u8DEF\u3001803\u8DEF\u3001\u5730\u94C1\u4E94\u53F7\u7EBF\u5230\u5929\u901A\u82D1\u5357\u7AD9\u4E0B\u8F66\u5F80\u5357\u8D70\u5357300-400\u7C73\u5373\u5230\u3002\r\n"
Exception in thread "main" java.lang.NumberFormatException: For input string: "5317200-300"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:456)
at test.TestLiantong.decodeUnicode(TestLiantong.java:352)
at test.TestLiantong.zhi(TestLiantong.java:317)
at test.TestLiantong.neirong(TestLiantong.java:254)
at test.TestLiantong.main(TestLiantong.java:52)java 转码
\u53EF\u4E58\u516C\u4EA4758\u8DEF\u3001358\u652F\u8DEF\u3001858\u8DEF\u3001849\u8DEF\u3001984\u8DEF\u3001985\u8DEF\u3001850\u8DEF\u3001426\u8DEF\u3001464\u8DEF\u3001465\u8DEF\u3001803\u8DEF\u5230\u5929\u901A\u82D1\u4E0B\u8F66\u5F80\u56DE\u8D7050\u7C73\uFF0C\u5411\u897F\u5230\u57CE\u94C1\u4E94\u53F7\u7EBF\u4E0B\u9762\u5411\u5317200-300\u7C73\u5373\u5230\uFF0C\u6216\u4E3D\u6C34\u56ED\u4E0B\u8F66\u7A7F\u8FC7\u5929\u901A\u82D1\u4E94\u533A\u5230\u57CE\u94C1\u4E94\u53F7\u7EBF\u4E0B\u9762\u5411\u5357150-250\u7C73\u5373\u5230\uFF1B\u4E58\u5730\u94C1\u4E94\u53F7\u7EBF\u5230\u5929\u901A\u82D1\u5357\u7AD9\u4E0B\u8F66\uFF0C\u51FA\u7AD9\u5F80\u5357\u8D70\u5357300-400\u7C73\u5373\u5230\uFF1B\u7531\u5317\u5411\u5357758\u8DEF\u3001358\u652F\u3001858\u8DEF\u3001849\u8DEF\u3001984\u8DEF\u3001985\u8DEF\u3001850\u8DEF\u3001426\u8DEF\u3001464\u8DEF\u3001465\u8DEF\u3001803\u8DEF\u3001\u5730\u94C1\u4E94\u53F7\u7EBF\u5230\u5929\u901A\u82D1\u5357\u7AD9\u4E0B\u8F66\u5F80\u5357\u8D70\u5357300-400\u7C73\u5373\u5230\u3002\r\n
麻烦我想问下 有没有什么好的转码方式可以转出我要的结果
结果是这样的:
可乘公交758路、358支路、858路、849路、984路、985路、850路、426路、464路、465路、803路到天通苑下车往回走50米,向西到城铁五号线下面向北200-300米即到,或丽水园下车穿过天通苑五区到城铁五号线下面向南150-250米即到;乘地铁五号线到天通苑南站下车,出站往南走南300-400米即到;由北向南758路、358支、858路、849路、984路、985路、850路、426路、464路、465路、803路、地铁五号线到天通苑南站下车往南走南300-400米即到。
我的转码代码是:
private static String decodeUnicode(String dataStr) {
int start = 0;
int end = 0;
final StringBuffer buffer = new StringBuffer();
while( start > -1 ) {
end = dataStr.indexOf( "\\u", start + 2 );
String charStr = "";
if( end == -1 ) {
charStr = dataStr.substring( start + 2, dataStr.length() );
} else {
charStr = dataStr.substring( start + 2, end);
}
char letter = (char) Integer.parseInt( charStr, 16 );
buffer.append( new Character( letter ).toString() );
start = end;
}
return buffer.toString();
}
我这样转, 转到\u5317200-300 这个位置就报错了
我新手 没多少分请大虾们多多包含 这是我在控制台打出的内容:
改变前===="\u5317\u4EAC\u5E02\u660C\u5E73\u533A\u4E1C\u5C0F\u53E3\u9547\u4E2D\u6EE9\u6751"
改变后====北京市昌平区东小口镇中滩村
改变前===="\u53EF\u4E58\u516C\u4EA4758\u8DEF\u3001358\u652F\u8DEF\u3001858\u8DEF\u3001849\u8DEF\u3001984\u8DEF\u3001985\u8DEF\u3001850\u8DEF\u3001426\u8DEF\u3001464\u8DEF\u3001465\u8DEF\u3001803\u8DEF\u5230\u5929\u901A\u82D1\u4E0B\u8F66\u5F80\u56DE\u8D7050\u7C73\uFF0C\u5411\u897F\u5230\u57CE\u94C1\u4E94\u53F7\u7EBF\u4E0B\u9762\u5411\u5317200-300\u7C73\u5373\u5230\uFF0C\u6216\u4E3D\u6C34\u56ED\u4E0B\u8F66\u7A7F\u8FC7\u5929\u901A\u82D1\u4E94\u533A\u5230\u57CE\u94C1\u4E94\u53F7\u7EBF\u4E0B\u9762\u5411\u5357150-250\u7C73\u5373\u5230\uFF1B\u4E58\u5730\u94C1\u4E94\u53F7\u7EBF\u5230\u5929\u901A\u82D1\u5357\u7AD9\u4E0B\u8F66\uFF0C\u51FA\u7AD9\u5F80\u5357\u8D70\u5357300-400\u7C73\u5373\u5230\uFF1B\u7531\u5317\u5411\u5357758\u8DEF\u3001358\u652F\u3001858\u8DEF\u3001849\u8DEF\u3001984\u8DEF\u3001985\u8DEF\u3001850\u8DEF\u3001426\u8DEF\u3001464\u8DEF\u3001465\u8DEF\u3001803\u8DEF\u3001\u5730\u94C1\u4E94\u53F7\u7EBF\u5230\u5929\u901A\u82D1\u5357\u7AD9\u4E0B\u8F66\u5F80\u5357\u8D70\u5357300-400\u7C73\u5373\u5230\u3002\r\n"
Exception in thread "main" java.lang.NumberFormatException: For input string: "5317200-300"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:456)
at test.TestLiantong.decodeUnicode(TestLiantong.java:352)
at test.TestLiantong.zhi(TestLiantong.java:317)
at test.TestLiantong.neirong(TestLiantong.java:254)
at test.TestLiantong.main(TestLiantong.java:52)java 转码
解决方案 »
- 用netbeans开发EJB项目出现的问题
- java中如何将字符串的编码从utf-8转换成gbk而且不会产生乱码
- 推荐一本JSF2.0的书
- 把所有的srvice都定义到BaseAction中是否合适?
- 在struts2里面用el获取到Action里的值
- Servlet
- 我要showhand了,求实际工作中的经验
- 我在一個jsp中用到application.getRealPath() 但是,我打成war後就不能用了,得到的是null值
- 怎样去掉JavaApplet的底色???
- java如何实现word文件首页的替换
- java LinkedList学习心得
- myEclipse debug jar包
String ss="\u53EF\u4E58\u516C\u4EA4758\u8DEF\u3001358\u652F\u8DEF\u3001858\u8DEF\u3001849\u8DEF\u3001984\u8DEF\u3001985\u8DEF\u3001850\u8DEF\u3001426\u8DEF\u3001464\u8DEF\u3001465\u8DEF\u3001803\u8DEF\u5230\u5929\u901A\u82D1\u4E0B\u8F66\u5F80\u56DE\u8D7050\u7C73\uFF0C\u5411\u897F\u5230\u57CE\u94C1\u4E94\u53F7\u7EBF\u4E0B\u9762\u5411\u5317200-300\u7C73\u5373\u5230\uFF0C\u6216\u4E3D\u6C34\u56ED\u4E0B\u8F66\u7A7F\u8FC7\u5929\u901A\u82D1\u4E94\u533A\u5230\u57CE\u94C1\u4E94\u53F7\u7EBF\u4E0B\u9762\u5411\u5357150-250\u7C73\u5373\u5230\uFF1B\u4E58\u5730\u94C1\u4E94\u53F7\u7EBF\u5230\u5929\u901A\u82D1\u5357\u7AD9\u4E0B\u8F66\uFF0C\u51FA\u7AD9\u5F80\u5357\u8D70\u5357300-400\u7C73\u5373\u5230\uFF1B\u7531\u5317\u5411\u5357758\u8DEF\u3001358\u652F\u3001858\u8DEF\u3001849\u8DEF\u3001984\u8DEF\u3001985\u8DEF\u3001850\u8DEF\u3001426\u8DEF\u3001464\u8DEF\u3001465\u8DEF\u3001803\u8DEF\u3001\u5730\u94C1\u4E94\u53F7\u7EBF\u5230\u5929\u901A\u82D1\u5357\u7AD9\u4E0B\u8F66\u5F80\u5357\u8D70\u5357300-400\u7C73\u5373\u5230\u3002\r\n";
String sss="可乘公交758路、358支路、858路、849路、984路、985路、850路、426路、464路、465路、803路到天通苑下车往回走50米,向西到城铁五号线下面向北200-300米即到,或丽水园下车穿过天通苑五区到城铁五号线下面向南150-250米即到;乘地铁五号线到天通苑南站下车,出站往南走南300-400米即到;由北向南758路、358支、858路、849路、984路、985路、850路、426路、464路、465路、803路、地铁五号线到天通苑南站下车往南走南300-400米即到。\r\n";
System.out.println(ss.equals(sss));//true
把你要解码的内容存到test.txt里面就行了
至少我试了下你这个例子是没问题的public static void main(String[] args) throws Exception {
RandomAccessFile file = new RandomAccessFile("test.txt", "r");
FileChannel fileChannel = file.getChannel();
ByteBuffer buffer = fileChannel
.map(MapMode.READ_ONLY, 0, file.length());
CharBuffer cBuffer = Charset.defaultCharset().decode(buffer);
System.out.println("解码前:");
System.out.println(cBuffer);
CharArrayReader reader = new CharArrayReader(cBuffer.toString()
.toCharArray());
StringBuilder sb = new StringBuilder();
char previous = 0;
while (reader.ready()) {
char c = (char) reader.read();
if (previous == '\\' && c == 'u') {
byte[] data = new byte[2];
for (int i = 0; i < data.length; i++) {
data[i] = Byte.parseByte(String.valueOf((char)reader
.read()), 16);
data[i] = (byte) ((data[i] << 4 )|Byte
.parseByte(String.valueOf((char)reader.read()), 16));
}
sb.append(new String(data, "unicode"));
previous = 0;
} else {
sb.append(previous);
previous = c;
}
}
if(previous != 0)
sb.append(previous);
System.out.println("解码后:");
System.out.println(sb.toString().replaceAll("\u0000", ""));
}
RandomAccessFile file = new RandomAccessFile("test.txt", "r");
FileChannel fileChannel = file.getChannel();
ByteBuffer buffer = fileChannel
.map(MapMode.READ_ONLY, 0, file.length());
CharBuffer cBuffer = Charset.defaultCharset().decode(buffer);
file.close();
String content = cBuffer.toString();
System.out.println("解码前:");
System.out.println(content);
Pattern pattern = Pattern.compile("\\\\u[\\da-fA-F]{4}");
Matcher matcher = pattern.matcher(content);
StringBuffer result = new StringBuffer();
while(matcher.find()){
String c = decode(matcher.group());
matcher.appendReplacement(result, String.valueOf(c));
}
matcher.appendTail(result);
System.out.println("解码后:");
System.out.println(result);
}
private static String decode(String str) throws UnsupportedEncodingException{
byte[] data = new byte[2];
data[0] = (byte) Integer.parseInt(str.substring(2, 4), 16);
data[1] = (byte) Integer.parseInt(str.substring(4, 6), 16);
return new String(data, "unicode");
}这样是不是清楚多了
System.out.println(str);