Java return 问题

SmileToCandy 2012-07-13 12:23:27

public static String processContentCustomer(String smsContent,List<SmsSignCustomerDto> dtoList,String customerId){

if(pattern.matcher(smsContent).find()){
//return 后直接返回到这里.
processContentCustomer(smsContent,dtoList,customerId);
}else{
//进入这里并没有返回到方法的顶部 ,而是上面的那个的这个方法是怎么回事?
return smsContent;
}
}

...全文
203 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
SmileToCandy 2012-07-14
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

能重新仔细描述 你要问的问题吗???

什么返回 最初的方法……

之前不是又一次递归了吗??? 我勒个去……
[/Quote]
我想在第二个方法怎么跳回到第一个方法返回.
ll894311655 2012-07-13
  • 打赏
  • 举报
回复
这不是传说中的递归嘛~
a395885670 2012-07-13
  • 打赏
  • 举报
回复
递归?
haiercs 2012-07-13
  • 打赏
  • 举报
回复
我也觉得很奇怪。。。
蘑菇頭 2012-07-13
  • 打赏
  • 举报
回复
能重新仔细描述 你要问的问题吗???

什么返回 最初的方法……

之前不是又一次递归了吗??? 我勒个去……
蘑菇頭 2012-07-13
  • 打赏
  • 举报
回复
⊙﹏⊙b汗……

寡人 给 跪了………………
风火轮 2012-07-13
  • 打赏
  • 举报
回复
你这不会报错奇迹

public static String processContentCustomer(String smsContent,List<SmsSignCustomerDto> dtoList,String customerId){

if(pattern.matcher(smsContent).find()){
//return 后直接返回到这里.
return processContentCustomer(smsContent,dtoList,customerId); 应该这样
}else{
//进入这里并没有返回到方法的顶部 ,而是上面的那个的这个方法是怎么回事?
return smsContent;
}
}


SmileToCandy 2012-07-13
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

引用 13 楼 的回复:

引用 12 楼 的回复:

怎么没人关注啊, 这么经典的问题.


你想要什么,表述清楚

我就是想把 一条像这样的内容:尊敬的{XX}你的卡上余额为{XX} 把{XX}全部替换成 数据库中取出的数据
参数 smsContent 为这天内容,List<SmsSignCustomerDto> dtoList 为用存储过程查询出来管理要修改{XX}……
[/Quote]
我再仔细看了我的回复, 汗颜啊....
SmileToCandy 2012-07-13
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

引用 12 楼 的回复:

怎么没人关注啊, 这么经典的问题.


你想要什么,表述清楚
[/Quote]
我就是想把 一条像这样的内容:尊敬的{XX}你的卡上余额为{XX} 把{XX}全部替换成 数据库中取出的数据
参数 smsContent 为这天内容,List<SmsSignCustomerDto> dtoList 为用存储过程查询出来管理要修改{XX}的数据, customerId 为要和 dtoList 某一条数据的ID 相同, 才说明 dtoList 里面的数据是属于 这个customer的. 描述能力不行, 请谅解.
wentshop 2012-07-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

怎么没人关注啊, 这么经典的问题.
[/Quote]

你想要什么,表述清楚
SmileToCandy 2012-07-13
  • 打赏
  • 举报
回复
怎么没人关注啊, 这么经典的问题.
SmileToCandy 2012-07-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 7 楼 的回复:

我怎么在

Java code

if(pattern.matcher(smsContent).find()){
processContentCustomer(smsContent,dtoList,customerId);
}else{
//这里返回这个方法
……


要返回 什么方法…… 这个方法是做什么的哈????你能说清楚吗???
……
[/Quote]

返回到最初进入时的这个方法, 然后返回. 描述能不行啊. 求知音....
SmileToCandy 2012-07-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

我怎么在

Java code

if(pattern.matcher(smsContent).find()){
processContentCustomer(smsContent,dtoList,customerId);
}else{
//这里返回这个方法
……
[/Quote]

我知道是什么原因, 就是找不到好的解决方案.你看下后面的2个完整的代码截图.
蘑菇頭 2012-07-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

我怎么在

Java code

if(pattern.matcher(smsContent).find()){
processContentCustomer(smsContent,dtoList,customerId);
}else{
//这里返回这个方法
……
[/Quote]

要返回 什么方法…… 这个方法是做什么的哈????你能说清楚吗???
蘑菇頭 2012-07-13
  • 打赏
  • 举报
回复
public static String processContentCustomer(String smsContent,List<SmsSignCustomerDto> dtoList,String customerId){

if(pattern.matcher(smsContent).find()){

//我个人认为:这个是一个个的匹配文件,找到了,就继续递归调用该方法processContentCustomer,直到没有文件,则直接返回smsContent

//return 后直接返回到这里.
processContentCustomer(smsContent,dtoList,customerId);
}else{
//进入这里并没有返回到方法的顶部 ,而是上面的那个的这个方法是怎么回事?
return smsContent;
}
}


就是一个递归的调用啊,亲……
SmileToCandy 2012-07-13
  • 打赏
  • 举报
回复
我怎么在


if(pattern.matcher(smsContent).find()){
processContentCustomer(smsContent,dtoList,customerId);
}else{
//这里返回这个方法
return smsContent;
}
SmileToCandy 2012-07-13
  • 打赏
  • 举报
回复

/**
* 处理客户标记
* @param smsContent
* @param dtoList
* @param customerId
* @return
*/
public static String processContentCustomer(String smsContent,List<SmsSignCustomerDto> dtoList,String customerId){
String regex = "\\{(\\w)*\\}";
//得到SmsSignUserDto 的所有属性
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(smsContent);
if (matcher.find()) {
for(SmsSignCustomerDto dto:dtoList){
String replace = smsContent.substring(matcher.start(), matcher.end());
String sign = replace.substring(1, replace.length()-1);
String stringLetter = sign.substring(0, 1).toUpperCase();
// 获得相应属性的getXXX和setXXX方法名称
String getName = "get" + stringLetter + sign.substring(1);

if(customerId == null){
return smsContent;
}
if(!customerId.equals(dto.getCustomerCode())){
continue;
}

Method method;
try {
method = dto.getClass().getDeclaredMethod(getName, null);
Object result = method.invoke(dto, null);
String rs = smsContent.replace(replace, result.toString());
smsContent = rs;
} catch (SecurityException e) {
return smsContent;
} catch (NoSuchMethodException e) {
return smsContent;
} catch (IllegalArgumentException e) {
return smsContent;
} catch (IllegalAccessException e) {
return smsContent;
} catch (InvocationTargetException e) {
return smsContent;
}

if(pattern.matcher(smsContent).find()){
processContentCustomer(smsContent,dtoList,customerId);
}else{
return smsContent;
}
}
}
return smsContent;
}


完整的方法是这样的.
五哥 2012-07-13
  • 打赏
  • 举报
回复
public static String processContentCustomer(String smsContent,List<SmsSignCustomerDto> dtoList,String customerId){

if(pattern.matcher(smsContent).find()){
//return 后直接返回到这里.
processContentCustomer(smsContent,dtoList,customerId);
}else{
//进入这里并没有返回到方法的顶部 ,而是上面的那个的这个方法是怎么回事?
return smsContent;
}
return smsContent;

}

ss36290109 2012-07-13
  • 打赏
  • 举报
回复
递归啊。。

62,616

社区成员

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

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