JAVA字符串替换

yang448246711 2010-12-01 01:54:04
我现在有一个页面,上传一个EXCEL附件,附件中有N列。还有一个文本框,框内可以输入:${1}今天到${2}去开会......

然后,在后台我把EXCEL解悉成了二维数组,现在请各位帮忙的是:如何把二维数组中的值,替换${1},文本中不只有一二个那样的规则,请帮忙写个循环...最好不要用replaceAll,因为这个要考虑到正则的问题。

谢谢,在线等.......
...全文
179 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mingming912 2010-12-01
  • 打赏
  • 举报
回复


[Test]
public void Test()
{
string[][] data = { new string[] { "XX", "11:20", "深圳" }
//, new string[] { "小七", "12:20", "上海" }
};
string template = "${1},请你于${2}来${3}开会,别迟到了";

foreach( var item in data ) {

//结果
StringBuilder sbResult = new StringBuilder();

//暂时存放数据
StringBuilder sbTemp = new StringBuilder();
StringBuilder sbTemp1 = new StringBuilder();


bool flag = false;//是否正在匹配${0}
for( int i = 0; i < template.Length; i++ ) {
var c = template[i];
var nextC = i < template.Length - 1 ? template[i + 1] : ' ';

if( c == '$' && nextC == '{' ) {
flag = true;
sbTemp1.Append(c);
}
else if( flag && c == '{' ) {
sbTemp1.Append(c);
continue;
}
else if( c == '}' && flag ) {
flag = false;
sbTemp1.Append(c);

int pos = 0;
if( int.TryParse(sbTemp.ToString(), out pos) ) {
if( pos > item.Length ) {
sbResult.Append("");
}
else {
sbResult.Append(item[pos - 1]);
}
}
else {
sbResult.Append(sbTemp1);
}
sbTemp.Length = 0;
sbTemp1.Length = 0;
}
else if( flag && c != '$' && c != '{' ) {
sbTemp.Append(c);
if( i == template.Length - 1 ) {
sbResult.Append(sbTemp);
}
}
else {
sbResult.Append(c);
}
}

Assert.AreEqual("XX,请你于11:20来深圳开会,别迟到了", sbResult.ToString());
}
}
night__cat 2010-12-01
  • 打赏
  • 举报
回复
for循环
Grave_rain 2010-12-01
  • 打赏
  • 举报
回复
String[][] strs={{"12:34","13:24","21:33"},{"1:34","3:24"},{"2:34","5:24"},{"7:34","8:24"},{"15:34","17:24"}};
String message="tes}t${1}今天到${2}去开会${2}..${6}....";
//用StringTokenizer分割字符串 以"${"分割,稍后再判断以"}"结尾 取出中间数组
StringTokenizer tokenizer=new StringTokenizer(message,"${");
//用数组保存所有分割的数据
String[] messages=new String[tokenizer.countTokens()];
for(int i=0;i<messages.length;i++){
messages[i]=tokenizer.nextToken();
}
for(String temp:messages){
System.out.println(temp);
}
//循环数组
for(int i=0;i<strs.length;i++){
String[] rows=strs[i];
//messages备份
String[] tempMessage=messages.clone();
//字符串数组循环,替换 execl数组
for(int j=0;j<tempMessage.length;j++){
String tempStr=tempMessage[j];
int m=tempStr.indexOf("}");
//如过==-1 表示 并不是${num}
if(m!=-1){
String numStr=tempStr.substring(0, m);
Integer num=null;
//转换异常表示${} 中不是数字
try {
num=Integer.parseInt(numStr);
} catch (NumberFormatException e) {
continue;
}
//num要不为null 并且 小于execl数组的横向长度
if(num!=null && num<rows.length+1 && num>0){
tempMessage[j]= rows[num-1]+tempStr.substring(m+1);
}else{
//否则不替换,还原字符串
tempMessage[j]= "${"+tempStr;
}

}


}
//最后拼接tempMessage 也可以用StringBuffer 不过,估计拼接小于4个就不需要
String endStr="";
for(String temp:tempMessage){
endStr+=temp;
}
//endStr 估计是保存到一个集合中,然后做展示 暂时用输出
System.out.println(endStr);
}
好麻烦,自己去整理,和你的思路有些不一样...也许更麻烦...
Lena-Yang 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wyq2318032 的回复:]

[/Quote]

你的头像好喜感,好惊悚。酱油党
害虫滴害虫 2010-12-01
  • 打赏
  • 举报
回复
不用正则,脑子有病,为什么不能用正则
JackLeiMM 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yang448246711 的回复:]
Java code

String con="${1}今天在${2}开会";
if(con.indexOf("$")!=-1){
con=con.replaceAll("\\$\\{1\\}", "XX");
con=con.replaceAll("\\$\\{2\\}", "上海");
}
System.out.println(con+" ");


我用J……
[/Quote]
不用正则,就用循环呀。。。。。。。。
一个for循环,就能搞定
yang448246711 2010-12-01
  • 打赏
  • 举报
回复

String con="${1}今天在${2}开会";
if(con.indexOf("$")!=-1){
con=con.replaceAll("\\$\\{1\\}", "XX");
con=con.replaceAll("\\$\\{2\\}", "上海");
}
System.out.println(con+" ");

我用JAVA写了一个正则的
输出结果是:XX今天在上海开会

现在要的是不用正则写
吓大的 2010-12-01
  • 打赏
  • 举报
回复
piaopiaohu123 2010-12-01
  • 打赏
  • 举报
回复
没看懂
huminghua 2010-12-01
  • 打赏
  • 举报
回复
那你可以直接写个循环,然后用正则替换呗!
zheng192004 2010-12-01
  • 打赏
  • 举报
回复
额~~不懂,帮顶~~
害虫滴害虫 2010-12-01
  • 打赏
  • 举报
回复
没明白啥意思

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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