String s = "123456";
for (int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
if (c >= 0 && c <= 255)
{
sb.append(c);
}
else
{……}
}
上述代码编译通过,但是执行的时候报错如下:
SRVE0026E: [Servlet 错误]-[java.lang.StringBuffer: method append(Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; not found]:java.lang.NoSuchMethodError: java.lang.StringBuffer: method append(Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; not found
我用的是JDK 1.5
8 个解决方案
#1
没任何问题,应该是其他地方的错误
#2
这个代码没错,你把原程序发上来看看
#3
贴出来的代码的确没有问题。
#4
搞错了,我重新找了一个地方做测试,发现的确不是这个问题.其实是这样的,我做了一个自动转UTF8的函数如下:
public static String toUtf8String(String s)
{
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 0 && c <= 255)
{
sb.append(c);
}
else
{
byte[] b;
try {
b = String.valueOf(c).getBytes("utf-8");
} catch (Exception ex) {
System.out.println(ex);
b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
if (k < 0)
k += 256;
sb.append("%" + Integer.toHexString(k).toUpperCase());
}
}
}
return sb.toString();
}
在1.4下编译,没有问题,在1.5下编译,就提示sb.append(c)处就提示‘未处理的异常类型IOException’,编译不通过,可是添加了抛出IOException后,编译通过,但是调用这个函数,依然报错如帖子开始所言。
奇怪啊!
public static String toUtf8String(String s)
{
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 0 && c <= 255)
{
sb.append(c);
}
else
{
byte[] b;
try {
b = String.valueOf(c).getBytes("utf-8");
} catch (Exception ex) {
System.out.println(ex);
b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
if (k < 0)
k += 256;
sb.append("%" + Integer.toHexString(k).toUpperCase());
}
}
}
return sb.toString();
}
在1.4下编译,没有问题,在1.5下编译,就提示sb.append(c)处就提示‘未处理的异常类型IOException’,编译不通过,可是添加了抛出IOException后,编译通过,但是调用这个函数,依然报错如帖子开始所言。
奇怪啊!
#5
我这里是没事,你编译的版本和执行的版本是不是不吻合阿?
#6
试过了,这段代码没问题。
#7
我这里也没事.
#8
解决了,问题出在别的地方,这段代码没关系,解决问题第一。
我用java.net.URLEncoder.encode(req.getParameter("newname"),"utf-8")转化了,没那么麻烦,避免了刚才那个问题,谢谢诸位!
我用java.net.URLEncoder.encode(req.getParameter("newname"),"utf-8")转化了,没那么麻烦,避免了刚才那个问题,谢谢诸位!
#1
没任何问题,应该是其他地方的错误
#2
这个代码没错,你把原程序发上来看看
#3
贴出来的代码的确没有问题。
#4
搞错了,我重新找了一个地方做测试,发现的确不是这个问题.其实是这样的,我做了一个自动转UTF8的函数如下:
public static String toUtf8String(String s)
{
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 0 && c <= 255)
{
sb.append(c);
}
else
{
byte[] b;
try {
b = String.valueOf(c).getBytes("utf-8");
} catch (Exception ex) {
System.out.println(ex);
b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
if (k < 0)
k += 256;
sb.append("%" + Integer.toHexString(k).toUpperCase());
}
}
}
return sb.toString();
}
在1.4下编译,没有问题,在1.5下编译,就提示sb.append(c)处就提示‘未处理的异常类型IOException’,编译不通过,可是添加了抛出IOException后,编译通过,但是调用这个函数,依然报错如帖子开始所言。
奇怪啊!
public static String toUtf8String(String s)
{
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 0 && c <= 255)
{
sb.append(c);
}
else
{
byte[] b;
try {
b = String.valueOf(c).getBytes("utf-8");
} catch (Exception ex) {
System.out.println(ex);
b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
if (k < 0)
k += 256;
sb.append("%" + Integer.toHexString(k).toUpperCase());
}
}
}
return sb.toString();
}
在1.4下编译,没有问题,在1.5下编译,就提示sb.append(c)处就提示‘未处理的异常类型IOException’,编译不通过,可是添加了抛出IOException后,编译通过,但是调用这个函数,依然报错如帖子开始所言。
奇怪啊!
#5
我这里是没事,你编译的版本和执行的版本是不是不吻合阿?
#6
试过了,这段代码没问题。
#7
我这里也没事.
#8
解决了,问题出在别的地方,这段代码没关系,解决问题第一。
我用java.net.URLEncoder.encode(req.getParameter("newname"),"utf-8")转化了,没那么麻烦,避免了刚才那个问题,谢谢诸位!
我用java.net.URLEncoder.encode(req.getParameter("newname"),"utf-8")转化了,没那么麻烦,避免了刚才那个问题,谢谢诸位!