转自: http://www.crifan.com/how_to_implement_android_java_output_parameter/
【问题】
Android中,即Java中,如何调用函数,传递一个OUT类型的参数,然后可以保存函数返回时的值的。
【解决过程】
1.即,用这样的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/** Extract single string from input whole string
* Note:
* 1. input pattern should include one group, like 'xxx(xxx)xxx'
* 2. output is in extractedStr
* */
public
Boolean extractSingleStr(String pattern, String extractFrom, String extractedStr)
{
Pattern strP = Pattern.compile(pattern);
Matcher foundStr = strP.matcher(extractFrom);
Boolean found = foundStr.find();
if
(found)
{
extractedStr = foundStr.group(
1
);
}
return
found;
}
String extractedTitle =
""
;
if
(extractSingleStr(
"<p\\s+class=\"mid_tit\">(.+?)</p>"
, respHtml, extractedTitle))
{
etUrlOrId.setText(extractedTitle);
}
|
是无法通过extractedTitle获得对应的值的。
2.试了试,把函数写出
取地址形式,加上&:
String &extractedStr
或者指针形式:
String *extractedStr
都是语法错误,不合法的。
3.参考:
想去试试,结果发现,除了定义String数组,貌似还真没有方便的实现方式的。
4.再去参考:
和
都好像是用
StringBuilder
去试试:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public
Boolean extractSingleStr(String pattern, String extractFrom, StringBuilder extractedStr)
{
Pattern strP = Pattern.compile(pattern);
Matcher foundStr = strP.matcher(extractFrom);
Boolean found = foundStr.find();
if
(found)
{
extractedStr.append(foundStr.group(
1
));
}
return
found;
}
StringBuilder extractedTitle =
new
StringBuilder();
if
(extractSingleStr(
"<p\\s+class=\"mid_tit\">(.+?)</p>"
, respHtml, extractedTitle))
{
etUrlOrId.setText(extractedTitle);
}
|
结果是可以的:
5.另外这里解释的更加清楚的:
How to use an output parameter in Java?
【总结】
当Java中函数中,想要实现output parameter时,对应的参数,不能是Immutable,即不能是,不可更改的,
而String就是Immutable,所以要换用StringBuilder之类的,Mutable的类型的变量,去实现对应的output parameter。