一段关于合并字符串的代码

时间:2023-01-03 10:02:04
问题描述:例如这样的字符串:“我不知道这些评论是不是你们网站自己人写的<END>感觉你们说的都挺好的……真有那么好吗?我定的手机今天到的<END>你们想知道发生什么事情了吗?手机是旧的<END>别人用过的<END>只是外壳是新的<END>对卓越不知道说什么了<END>以后都不想在这买东西了……<END>”,首先使用split函数按“<END>”(END代表一句的结束)将字符串分割成数组,然后对字符串进行合并,如果相邻的两句话长度<=25,则进行合并知道长度>25为止,并在句子末尾添加“<END>”。


我的错误代码如下:
public static String combine(String after)
{

StringBuffer s2 = new StringBuffer(); 
String [] tempString=null;
String temp=null;
tempString=after.split("<END>");

//对合并之后数组长度为1的情况的处理
if(tempString.length==1)
{
for(int i=0;i<tempString.length;i++)
{
temp=tempString[i]+"<END>";
//System.out.println(temp);
}
}
//对数组长度大于1的处理
else
{
for(int i=0;i<tempString.length;i++)
{
for(int j=i+1;j<tempString.length;j++)
{
int count=0;

if(tempString[i].length()+tempString[j].length()<=25&&j!=tempString.length-1)
{
++count;//指示是否进行合并过
tempString[i]=tempString[i]+tempString[j];//进行合并
temp=temp+tempString[i];//把合并之后的放在temp字符串里面
//System.out.println(temp);
}
else if(tempString[i].length()+tempString[j].length()<=25&&j==tempString.length-1)
{
tempString[i]=tempString[i]+tempString[j];
temp=temp+tempString[i]+"<END>";
//System.out.println(temp);
}
else if(tempString[i].length()+tempString[j].length()>25&&j!=tempString.length-1)
{

if(count==0)
{
temp=tempString[i]+"<END>";
i=j-1;
break;
}
else
{
temp=temp+"<END>";
i=j-1;
break;
}

}
else if(tempString[i].length()+tempString[j].length()>25&&j==tempString.length-1)
{
if(count==0)
{
temp=tempString[i]+"<END>";
temp=temp+tempString[j]+"<END>";
i=j;

}
else
{
temp=temp+"<END>";
temp=temp+tempString[j]+"<END>";
i=j;
}

//System.out.println(temp);
}
}

}
}


return temp;
}


运行之后的错误结果为:只是外壳是新的对卓越不知道说什么了<END>以后都不想在这买东西了……<END>

希望大家对我的代码进行改正,或者给出你认为正确的代码,在线等答复,谢谢大家的参与!!!

7 个解决方案

#1



public class Test {
public static String combine(String after) {
StringBuilder result = new StringBuilder();
String[] ss = after.split("<END>");
String tmp = "";
for (String s:ss) {
tmp += s;
if (tmp.length() > 25) {
result.append(tmp);
result.append("<END>\n");
tmp = "";
}
}
if (tmp.length() > 0) {
result.append(tmp);
result.append("<END>");
}
return result.toString();
}

public static void main(String[] args) {
System.out.println(combine("我不知道这些评论是不是你们网站自己人写的<END>感觉你们说的都挺好的……真有那么好吗?我定的手机今天到的<END>你们想知道发生什么事情了吗?手机是旧的<END>别人用过的<END>只是外壳是新的<END>对卓越不知道说什么了<END>以后都不想在这买东西了……<END>"));
}
}

#2


 result.append("<END> \n");

多了个\n,我看结果用的,忘删了。

#3


你这段的运行代码结果还有点问题:要求合并之后的长度一定不要超过25,但你的结果合并之后第一句话的长度明显超过了25,对吧,意思是,如果第一句加上第二句小于25才合并,如果大于则不合并,如果第一句加第二句(或者第一句加第二句加第三句、、、一直小于25,则一直合并,直到加上某一句大于25,才不合并)
我不知道这些评论是不是你们网站自己人写的感觉你们说的都挺好的……真有那么好吗?我定的手机今天到的<END>你们想知道发生什么事情了吗?手机是旧的别人用过的只是外壳是新的<END>对卓越不知道说什么了以后都不想在这买东西了……<END>


#4


不是很简单吗 ?判断一下长度的问题。 
现在用的是手机上网,代码不好敲。

#5


如果相邻的三句(甚至n句)话长度<=25,怎么处理?

#6


“如果第一句加第二句(或者第一句加第二句加第三句、、、一直小于25,则一直合并,直到加上某一句大于25,才不合并)”
搞一个递归就可以解决了

#7


StringBuilder sb = new StringBuilder();
StringBuilder result = new StringBuilder();
for(int i=0;i<tempString.length;i++){
if(sb.length()+tempString[i].length > 25){
result.append(sb.toString()).append("<END");
sb=new StringBuilder(tempString[i]);
}else{
sb.append(tempString[i]);
}
if(sb.length()>0){result.append(sb.toString()).append("<END>");}
return result.toString();

手机打 ,好烦。大概思路,可参考。

#1



public class Test {
public static String combine(String after) {
StringBuilder result = new StringBuilder();
String[] ss = after.split("<END>");
String tmp = "";
for (String s:ss) {
tmp += s;
if (tmp.length() > 25) {
result.append(tmp);
result.append("<END>\n");
tmp = "";
}
}
if (tmp.length() > 0) {
result.append(tmp);
result.append("<END>");
}
return result.toString();
}

public static void main(String[] args) {
System.out.println(combine("我不知道这些评论是不是你们网站自己人写的<END>感觉你们说的都挺好的……真有那么好吗?我定的手机今天到的<END>你们想知道发生什么事情了吗?手机是旧的<END>别人用过的<END>只是外壳是新的<END>对卓越不知道说什么了<END>以后都不想在这买东西了……<END>"));
}
}

#2


 result.append("<END> \n");

多了个\n,我看结果用的,忘删了。

#3


你这段的运行代码结果还有点问题:要求合并之后的长度一定不要超过25,但你的结果合并之后第一句话的长度明显超过了25,对吧,意思是,如果第一句加上第二句小于25才合并,如果大于则不合并,如果第一句加第二句(或者第一句加第二句加第三句、、、一直小于25,则一直合并,直到加上某一句大于25,才不合并)
我不知道这些评论是不是你们网站自己人写的感觉你们说的都挺好的……真有那么好吗?我定的手机今天到的<END>你们想知道发生什么事情了吗?手机是旧的别人用过的只是外壳是新的<END>对卓越不知道说什么了以后都不想在这买东西了……<END>


#4


不是很简单吗 ?判断一下长度的问题。 
现在用的是手机上网,代码不好敲。

#5


如果相邻的三句(甚至n句)话长度<=25,怎么处理?

#6


“如果第一句加第二句(或者第一句加第二句加第三句、、、一直小于25,则一直合并,直到加上某一句大于25,才不合并)”
搞一个递归就可以解决了

#7


StringBuilder sb = new StringBuilder();
StringBuilder result = new StringBuilder();
for(int i=0;i<tempString.length;i++){
if(sb.length()+tempString[i].length > 25){
result.append(sb.toString()).append("<END");
sb=new StringBuilder(tempString[i]);
}else{
sb.append(tempString[i]);
}
if(sb.length()>0){result.append(sb.toString()).append("<END>");}
return result.toString();

手机打 ,好烦。大概思路,可参考。