分享
 
 
 

源码解读:java 解析字符串为boolean四种实现方法的细节和特点

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

一般有以下四种把字符串转换成boolean的方法,各自有各自的实现思路和特点:

1.最基本的,先看JDK的做法:

java,lang.Boolean的toBoolean(String name)是个私有方法。

private static boolean toBoolean(String name) {

return ((name != null) && name.equalsIgnoreCase("true"));

}

可以看到,除了不区分大小写的字符串true外,其余的字符串均表示false;

2.jsp中的<jsp:setProperty>标签.

通过试验,发现在jsp标签中,on也会被转换成true的。

完整的javaBean:

-------------------------------------

package com.lizongbo;

/**

* <p>Title: lizongbo demo</p>

* <p>Description: lizongbo的测试程序</p>

* <p>Copyright: Copyright (c) 2005</p>

* <p>Company: lizongbo</p>

* @author lizongbo <a href="lizongbo@gmail.com">lizongbo</a>

* @version 1.0

*/

public class TestbooleanBean {

private boolean sample = false;

//Access sample property

public boolean getSample() {

return sample;

}

//Access sample property

public void setSample(boolean newValue) {

sample = newValue;

}

}

-------------------------------------

jsp文件

-------------------------------------

<%@ page contentType="text/html; charset=GBK" %>

<html>

<head>

<title>

testboolean

</title>

</head>

<jsp:useBean id="testbooleanBeanId" scope="session" class="com.lizongbo.TestbooleanBean" />

<jsp:setProperty name="testbooleanBeanId" property="*" />

<body bgcolor="#ffffff">

<form method="post" action="testboolean.jsp">

<br>Enter new value : <input name="sample"><br>

<br><br>

<input type="submit" name="Submit" value="Submit">

<input type="reset" value="Reset">

<br>

Value of Bean property is :<jsp:getProperty name="testbooleanBeanId" property="sample" />

</form>

</body>

</html>

-------------------------------------

通过察看tomcat源代码可以找到其实现boolean转换的代码

org.apache.jasper.runtime.JspRuntimeLibrary.java

public static Object convert(String propertyName, String s, Class t,

Class propertyEditorClass)

throws JasperException

{

try {

if (s == null) {

if (t.equals(Boolean.class) || t.equals(Boolean.TYPE))

s = "false";

else

return null;

}

if (propertyEditorClass != null) {

return getValueFromBeanInfoPropertyEditor(

t, propertyName, s, propertyEditorClass);

} else if ( t.equals(Boolean.class) || t.equals(Boolean.TYPE) ) {

if (s.equalsIgnoreCase("on") || s.equalsIgnoreCase("true"))

s = "true";

else

s = "false";

return new Boolean(s);

}

由此可以看出,jsp标签中是支持把不区分大小写的“on”和“true”都转换成true的。

3.org.apache.commons.lang.BooleanUtils.toBoolean(String str);

BooleanUtils提供了多种转换,这里只看它对字符串的转换。

看它的代码可以知道支持把不分大小写的“yes”,“on”,“true”都转换成true;

public static boolean toBoolean(String str) {

if ("true".equalsIgnoreCase(str)) {

return true;

} else if ("on".equalsIgnoreCase(str)) {

return true;

} else if ("yes".equalsIgnoreCase(str)) {

return true;

}

// no match

return false;

}

ps: apache commons configuration 中的Configuration getBoolean(String key)就是调用的这个转换方法。

4.com.opensymphony.util.TextUtils.parseBoolean(String in);

这个方法支持转换成true的范围最多最广也最灵活,容错性高,尽可能的满足了现实生活习惯,但是,不支持把“on”转换成true

/**

* Convert a String to an boolean.

* Accepts: 1/0, yes/no, true/false - case insensitive. If the value does

* not map to "true,", <code>false</code> is returned.

*

* @param in String to be parsed.

* @return boolean representation of String.

*/

public final static boolean parseBoolean(String in) {

in = noNull(in);

if (in.length() == 0) {

return false;

}

switch (in.charAt(0)) {

case '1':

case 'y':

case 'Y':

case 't':

case 'T':

return true;

}

return false;

}

通过以上分析,在允许使用第三方java lib的时候,推荐使用后两种做法。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有