android String的使用


第一:格式化字符串(动态设置字符串)

	protected CharSequence getFun1Text() {
		String srcStr = "Hello, %1$s! You have %2$05d new messages. 您目前的存款额为%3$+,.2f, 时间为:%4$tY-%4$tm-%4$te %4$tH:%4$tM";
		//Or srcStr = getString(R.string.fun1_text);  //<string name="fun1_text">"Hello, %1$s! You have %2$05d new messages. 您目前的存款额为%3$+,.2f, 时间为:%4$tY-%4$tm-%4$te %4$tH:%4$tM"</string>
		String name = "fycus";
		int num = 3;
		float money = -1111.3f;
		Calendar c = Calendar.getInstance();
		String ret = String.format(srcStr, name, num, money, c);
		return ret;
	}

输出结果: Hello, fycus! You have 00003 new messages. 您目前的存款额为-1,111.30, 时间为:2014-05-16 10:46

解释一下:

srcStr中 %1$s  %2$05d    %3$+,.2f   %4$tY  分别对应    String.format(srcStr, name, num, money, c);  中的后四个参数。

stirng中参数的一般格式 : %[index$][标识][最小宽度]转换方式。 

index就是1、2、3、4,对应String.format()方法中的传参;

标识就是“+”、“0”、“,”等,其中“+”代表在字符串前加正负号,“0”代表在数位不够的情况下补“0”,如0033;

最小宽度表示这个数要表示成多少位0033就是4位;

转换方式:d-十进制 o-八进制 x或X-十六进制 s-字符串 f-浮点数 t-时间

给个文件下载地址,改文件对format的格式有很详细的说明  http://download.csdn.net/detail/u010366911/7354581

第二:以html格式显示

	protected CharSequence getHtmlText1() {
		String html="<html><head><title><b>TextView使用HTML</b></title></head><body><p><strong>强调</strong></p><p><em>斜体</em></p>"  
                +"<p><a href=\"http://www.dreamdu.com/xhtml/\">超链接HTML入门</a>学习HTML!</p><p><font color=\"#aabb00\">颜色1"  
                +"</p><p><font color=\"#00bbaa\">颜色2</p><h1>标题1</h1><h3>标题2</h3><h6>标题3</h6><p>大于>小于<</p>" +  
                "</body></html>";  
		
		return Html.fromHtml(html);
	}

仅仅用一个 Html.fromHtml()方法即可解决问题。


不过有一个问题,上面代码中的string是硬编码,而我们习惯是将字符串写在string.xml中的,但如果我们将代码写成下面这样,又看不出html的效果。

<string name="html_text_wrong">Welcome to <b>Android</b>!</string>

	//Wrong code
	protected CharSequence getHtmlText11() {
		String html= getString(R.string.html_text_wrong);  
		return Html.fromHtml(html);
	}
	

文字没有变粗体,因为在  getString(R.string.html_text_wrong);  后  html_text_wrong 中的标签都被去掉了。传递给 Html.fromHtml()的只是 Welcome to Android!。

所以需要转换特殊字符,如下:

将 <string name="html_text_wrong">"Welcome to <b>Android</b>!"</string>

修改成    <string name="html_text">Welcome to &lt;b&gt;Android&lt;/b&gt;! </string>  即可


如果html 文本比较多的话要将特殊字符一个个转换很麻烦,可以用TextUtils.htmlEncode() 方法来转换。

	public void testTextUtils() {
		String str = "Welcome to <b>Android</b>! ";
		Log.e("fycus", "Encode string == " + TextUtils.htmlEncode(str));
	}


第三:formater + html 上面两种情况的综合

这会遇到一个问题,如下代码:

	private CharSequence getFormattedAndHtmlText() {
		String name = "abcdef<b>g";
		String text = "Welcome to <b>android</b>! , I am %1$s";
		CharSequence ret = String.format(text, name);
		ret = Html.fromHtml(ret.toString());
		return ret;
	}

输出结果是:


我们希望name="abcdef<b>g"  原样的输出,但是他却被转换了,因为 被Html.fromHtml()格式化了。

解决方法:

	private CharSequence getFormattedAndHtmlText() {
		String name = "abcdef<b>g";
		String text = "Welcome to <b>android</b>! , I am %1$s";
		CharSequence ret = null;
		name = TextUtils.htmlEncode(name);
		ret = String.format(text, name);
		ret = Html.fromHtml(ret.toString());
		return ret;
	}
输出结果:



第四:  plurals Quantity Strings

http://developer.android.com/guide/topics/resources/string-resource.html#Plurals

英文不好看的不是很明白:译文地址  http://blog.csdn.net/ltl451011/article/details/6947642


个人理解:不同的语言中,对数量的使用方式有所不同,比如某个国家的人可能会说“0本书”、“1本书”,“2本书”,但是我们中国人没有“0本书”的说法,我们通常说的是“没有书”。所以在多语言的环境中,当语境中要显示“0本书”这个概念时,在“某个国家”的语言版本(values-somecontry/string.xml)中应该显示 “0本书”,而在中文语言环境下(values-zh) 软件则会显示字符串“没有书”

android提供了 plurals 来解决这个问题, 例子如下:

    <plurals name="numbersOfBooks">
        <item quantity="zero">我没有书.</item>
        <item quantity="one">我有一本书.</item>
        <item quantity="two">我有两本书.</item>
        <item quantity="many">我有很多书.</item>
        <item quantity="other">我有一些书.</item>
    </plurals>

	/**
	 * 测试的时候 将手机语言“中/英”切换
	 * 
	 * @return
	 */
	private String quantityString() {
		String ret = "";
		ret = getResources().getQuantityString(R.plurals.numbersOfBooks, 1);
		return ret;
	}

手机为英文状态下输出:我有一本书.

手机为中文状态下输出:我有一些书.

原来因为中文没有复数语法,所以当语言是中文时,将总是获得quantity为other的字符串。 http://blog.csdn.net/sevenshal/article/details/10162571

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值