这样的字符串遍历,比较,截取(续)

fansnod 2011-05-15 02:36:43
续原来的帖子: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不能正确转换为字符串。

谢谢
...全文
239 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fansnod 2011-05-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fansnod 的回复:]

引用 1 楼 powerlee2008 的回复:
Java code

public class Test {
private String processFiled(String s) {
StringBuilder stringBuilder = new StringBuilder();
if (s.indexOf(":") == -1) {
stringBuilde……

……
[/Quote]

啊,不好意思,没仔细看你的代码,你的应该是没有我说的那些问题的。
非常感谢!!!!!!明天找多点数据验证一下再给分!!!
kai27ks 2011-05-15
  • 打赏
  • 举报
回复
1楼相当有耐心。。没耐心看完的飘过
Ade子夜 2011-05-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 powerlee2008 的回复:]

Java code

public class Test {
private String processFiled(String s) {
StringBuilder stringBuilder = new StringBuilder();
if (s.indexOf(":") == -1) {
stringBuilder.ap……
[/Quote]
顶!!!
fansnod 2011-05-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 powerlee2008 的回复:]
Java code

public class Test {
private String processFiled(String s) {
StringBuilder stringBuilder = new StringBuilder();
if (s.indexOf(":") == -1) {
stringBuilde……
[/Quote]

谢谢1楼回复。
我看了一下,你的想法我也尝试过。有两个问题,一是循环里加二,会漏了最后面一个;第二是再次用'|'来分,会导致紧跟|
后的12最后的输出没有前面的:
例如
: 10 :: 101: ABC: 102:GUANGZHOU:103: OK :11 : : 111: TIAN HE |968 |12 :

这个'|'后面连着的12也要带一个':'是原逻辑里面比较麻烦的地方,所以不能分别以':'/'|'来split
我是风 2011-05-15
  • 打赏
  • 举报
回复

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"));
}
}

62,616

社区成员

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

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