作业求助ava语言实现函数encode() ,实现对字符串的变换

itismin 2013-01-30 08:18:18
1)若已知字符串的当前字符不是大于0的数字字符,则复制该字符于新字符串中;
(2)若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中;
(3)若已知字符串的当前字符是一个大于0的数字字符,并且还有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中;
(4)以上述一次变换为一组,在不同组之间另插入一个下划线'_'用于分隔;
(5)若已知字符串中包含有下划线'_',则变换为 ”\UL” 。



public class Code {
public StringBuffer encode(String str){
char[] chs = str.toCharArray();
StringBuffer sb = new StringBuffer();
boolean change = false;//是否变化
for(int i = 0; i < chs.length; i++){
//若已知字符串的当前字符不是大于0的数字字符,则复制该字符于新字符串中;
if(chs[i] < 48 || chs[i] >57){
sb.append(chs[i]);
change = true;
}
//若已知字符串的当前字符是一个数字字符
if(chs[i] > 48 || chs[i] <= 57){
//且它之后没有后继字符,则简单地将它复制到新字符串中;
if(i == (chs.length -1)){
sb.append(chs[i]);
}else{//有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中;
String sss = String.valueOf(chs[i]);
int number = Integer.parseInt(sss);
for(int j = 0; j <= number; j++){
sb.append(chs[i]);
change = true;
}

}
}
//以上述一次变换为一组,在不同组之间另插入一个下划线'_'用于分隔;
if(change){
sb.append("_");
change = false;
}
if(chs[i] == '_'){
sb.append("\\UL");
}
}
return sb;
}
public static void main(String[] args) {
System.out.println(new Code().encode("24ab_2t2"));
}

}



运行报java.lang.NumberFormatException异常,请问问题出在哪,网上看了下这个异常是因为非数字字符转成数字导致的,但我实在看不看有什么问题,求解
...全文
200 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluemoby 2013-01-30
  • 打赏
  • 举报
回复
答案应该是这样的,这题目太绕了

public class Code {
	public String encode(String str) {
		char[] chs = str.toCharArray();
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < chs.length; i++) {

			// 若已知字符串的当前字符不是大于0的数字字符,则复制该字符于新字符串中;
			if (chs[i] <= 48 || chs[i] > 57) {
				if (chs[i] == '_') {
					sb.append("\\UL");
				} else {
					sb.append(chs[i]);
				}
				sb.append("_");
				
			}
			// 若已知字符串的当前字符是一个数字字符
			if (chs[i] > 48 && chs[i] <= 57) {
				// 且它之后没有后继字符,则简单地将它复制到新字符串中;
				if (i == (chs.length - 1)) {
					sb.append(chs[i]);
				} else {// 有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中;
					String count = String.valueOf(chs[i]);
					System.out.println(count);
					int number = Integer.parseInt(count);
					for (int j = 0; j <= number; j++) {
						sb.append(chs[i + 1]);
					}
					
				}
				sb.append("_");
			}

		}
		return sb.toString();
	}

	public static void main(String[] args) {

		System.out.println(new Code().encode("24ab_2t2"));
	}

}
liangs0620 2013-01-30
  • 打赏
  • 举报
回复
引用 2 楼 liangs0620 的回复:
下面按照要求写的····你之前写的很有问题····· Java code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748package fortest; public class Code { public StringBuffer en……
其中chs[i] == 95 "_"的ASCAL码为95
liangs0620 2013-01-30
  • 打赏
  • 举报
回复
下面按照要求写的····你之前写的很有问题·····
package fortest;

public class Code {
	public StringBuffer encode(String str) {
		char[] chs = str.toCharArray();
		StringBuffer sb = new StringBuffer();
		
		for (int i = 0; i < chs.length; i++) {
			// 若已知字符串的当前字符不是大于0的数字字符,则复制该字符于新字符串中;
			if (chs[i] < 48 || chs[i] > 57) {
				if (chs[i] == 95) {
					sb.append("\\UL");
					sb.append("_");
					continue;
				}
				sb.append(chs[i]);
				sb.append("_");
			}
			// 若已知字符串的当前字符是一个数字字符
			if (chs[i] >= 48 && chs[i] <= 57) {
				// 且它之后没有后继字符,则简单地将它复制到新字符串中;
				if (i == (chs.length - 1)) {
					sb.append(chs[i]);
				} else if(chs[i]>48) {// 有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中;
					String s;
					int number;
					s = String.valueOf(chs[i]);
					try {
						number = Integer.parseInt(s);
					} catch (Exception e) {
						continue;
					}
					for (int j = 0; j < number; j++) {
						sb.append(chs[i+1]);
					}
					sb.append("_");

				}
			}			
		}
		return sb;
	}

	public static void main(String[] args) {
		System.out.println(new Code().encode("24ab_2t2"));
	}

}
maxcai 2013-01-30
  • 打赏
  • 举报
回复
第13行修改为 if(chs[i] >= 48 && chs[i] <= 57){

62,621

社区成员

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

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