续原来的帖子:http://topic.csdn.net/u/20110514/12/64eec56e-3947-4ef8-83d1-cccc79cc338c.html#replyachor
判断符除了":",还有"|",":"相当于每一字段的标志,而"|"相当于同一字段的几行组成部分的分隔符
字段又分大类的字段和小类的字段,例如例子中的"10"是大类字段,没有详细说明,而"101","102"这些是属于"10"大类里面的小类字段,有各自的详细说明。
源字符串是为"10::101:ABC:102:GUANGZHOU :103:OK :11::111:TIAN HE |968 |12::",或
源字符串是为"10::101:ABC:102:GUANGZHOU :103:OK :11::111:TIAN HE |968 |12::121:Apr" 或
源字符串是为"10::101:ABC:102:GUANGZHOU :103:OK :11::111:TIAN HE |968 |12::121:Apr|12|121212"
对应输出为:
:10:
:101:ABC
:102:GUANGZHOU
:103:OK
:11:
:111:TIAN HE
968
:12:
或:
:10:
:101:ABC
:102:GUANGZHOU
:103:OK
:11:
:111:TIAN HE
968
:12:
:121:Apr
或:
:10:
:101:ABC
:102:GUANGZHOU
:103:OK
:11:
:111:TIAN HE
968
:12:
:121:Apr
12
121212
我的原逻辑:
public class Dtest {
public static void main(String args[]){ String s1 = "10::101:ABC:102:GUANGZHOU :103:OK :11::111:TIAN HE |968 |12::121:TEST "; if (!(s1.trim().endsWith(":")|s1.trim().endsWith("|"))){
s1 = s1.trim().concat(":");
}
char[] cstr = s1.trim().toCharArray();
char[] tstr = new char[s1.trim().length()+100];
int w2 = 0;
int w1beg = 0;
int clength = cstr.length - 1;
boolean cboolean = true;
for (int j = 0; j<=clength; j+=1 ){
if (cstr[j]==':'|cstr[j]=='|'){
if (cboolean&cstr[j]!='|'){
cboolean = false;
}
else {
if (cstr[j]==':'){
tstr[w2]=':';
w2+=1;
}
int alength = s1.substring(w1beg, j).trim().length();
char[] nchar = s1.substring(w1beg,j).trim().toCharArray();
for (int k = 0; k< alength; k+=1,w2++){
tstr[w2] = nchar[k];
}
tstr[w2] = '$';
w1beg = j + 1;
w2 = w2 + 1;
cboolean = true;
}
}
}
System.out.println(tstr);
}
}感觉不好,请问有没有其他有效率的方法呢?另外后面的tstr如何转为字符串?tstr.tostring不能正确转换为字符串。谢谢
判断符除了":",还有"|",":"相当于每一字段的标志,而"|"相当于同一字段的几行组成部分的分隔符
字段又分大类的字段和小类的字段,例如例子中的"10"是大类字段,没有详细说明,而"101","102"这些是属于"10"大类里面的小类字段,有各自的详细说明。
源字符串是为"10::101:ABC:102:GUANGZHOU :103:OK :11::111:TIAN HE |968 |12::",或
源字符串是为"10::101:ABC:102:GUANGZHOU :103:OK :11::111:TIAN HE |968 |12::121:Apr" 或
源字符串是为"10::101:ABC:102:GUANGZHOU :103:OK :11::111:TIAN HE |968 |12::121:Apr|12|121212"
对应输出为:
:10:
:101:ABC
:102:GUANGZHOU
:103:OK
:11:
:111:TIAN HE
968
:12:
或:
:10:
:101:ABC
:102:GUANGZHOU
:103:OK
:11:
:111:TIAN HE
968
:12:
:121:Apr
或:
:10:
:101:ABC
:102:GUANGZHOU
:103:OK
:11:
:111:TIAN HE
968
:12:
:121:Apr
12
121212
我的原逻辑:
public class Dtest {
public static void main(String args[]){ String s1 = "10::101:ABC:102:GUANGZHOU :103:OK :11::111:TIAN HE |968 |12::121:TEST "; if (!(s1.trim().endsWith(":")|s1.trim().endsWith("|"))){
s1 = s1.trim().concat(":");
}
char[] cstr = s1.trim().toCharArray();
char[] tstr = new char[s1.trim().length()+100];
int w2 = 0;
int w1beg = 0;
int clength = cstr.length - 1;
boolean cboolean = true;
for (int j = 0; j<=clength; j+=1 ){
if (cstr[j]==':'|cstr[j]=='|'){
if (cboolean&cstr[j]!='|'){
cboolean = false;
}
else {
if (cstr[j]==':'){
tstr[w2]=':';
w2+=1;
}
int alength = s1.substring(w1beg, j).trim().length();
char[] nchar = s1.substring(w1beg,j).trim().toCharArray();
for (int k = 0; k< alength; k+=1,w2++){
tstr[w2] = nchar[k];
}
tstr[w2] = '$';
w1beg = j + 1;
w2 = w2 + 1;
cboolean = true;
}
}
}
System.out.println(tstr);
}
}感觉不好,请问有没有其他有效率的方法呢?另外后面的tstr如何转为字符串?tstr.tostring不能正确转换为字符串。谢谢
解决方案 »
- 一个普通类可以继承某个类的同时又去实现其他接口类吗?
- java 写excel 文件问题;答完立刻给分
- 请教大家,系统中的轮流运行机制会不会使程序运行时间加长?
- 兄弟帮下忙!感激不尽!JAVA2D绘图中怎么实现画的图象被选中?还有实现图象的移动?
- 里面有免费的六位QQ号
- 我是菜鸟,请问print和println有什么区别?
- 简单问题
- 数组能转换成字符串输出,那么这个字符串能不能重新变为数组?
- iPortal Application Server (IPAS) 3.0 是什么? resin是什么?
- 求高手点拨一位Java粉丝的技术故障的修改方法。
- 不知道不用配置文件而采用Annotation实现ssh架构的项目多吗?
- 哪位高手知道linus系统自带的计算器怎么实现运算的?
public class Test {
private String processFiled(String s) {
StringBuilder stringBuilder = new StringBuilder();
if (s.indexOf(":") == -1) {
stringBuilder.append(s + "\n");
} else {
String[] ss = s.split(":");
int loops = ss.length - 1;
if (loops > 0) {
for (int i = 0; i < loops; i += 2) {
stringBuilder.append(":");
stringBuilder.append(ss[i]);
stringBuilder.append(":");
stringBuilder.append(ss[i + 1]);
stringBuilder.append("\n");
}
} else {
stringBuilder.append(":");
stringBuilder.append(ss[0]);
stringBuilder.append(":");
stringBuilder.append("\n");
}
}
return stringBuilder.toString();
}
public String process(String s) {
StringBuilder stringBuilder = new StringBuilder();
String[] ss = s.split("\\|");
for (int i = 0; i < ss.length; i++)
stringBuilder.append(this.processFiled(ss[i]));
return stringBuilder.toString();
}
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.process("10::101:ABC:102:GUANGZHOU :103:OK :11::111:TIAN HE |968 |12::"));
System.out.println(test.process("10::101:ABC:102:GUANGZHOU :103:OK :11::111:TIAN HE |968 |12::121:Apr"));
System.out.println(test.process("10::101:ABC:102:GUANGZHOU :103:OK :11::111:TIAN HE |968 |12::121:Apr|12|121212"));
}
}
谢谢1楼回复。
我看了一下,你的想法我也尝试过。有两个问题,一是循环里加二,会漏了最后面一个;第二是再次用'|'来分,会导致紧跟|
后的12最后的输出没有前面的:
例如
: 10 :: 101: ABC: 102:GUANGZHOU:103: OK :11 : : 111: TIAN HE |968 |12 :这个'|'后面连着的12也要带一个':'是原逻辑里面比较麻烦的地方,所以不能分别以':'/'|'来split