Android string.xml 及通配符 %$ 取值用法

本文介绍了 Android 开发中 string.xml 的多种实用技巧,包括通配符格式化字符串、数组使用、图片资源引用及基本字符串定义等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了代码规范化,这几天尝试了string.xml的使用:

 

1、通配符的使用:

 

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

 

在上面代码中,这个格式化的字符串有2个参数

%n$ms:代表输出的是字符串,n代表是第几个参数,设置m的值可以在输出之前放置空格 
%n$md:代表输出的是整数,n代表是第几个参数,设置m的值可以在输出之前放置空格,也可以设为0m,在输出之前放置m个0 
%n$mf:代表输出的是浮点数,n代表是第几个参数,设置m的值可以控制小数位数,如m=2.2时,输出格式为00.00

 

在java代码中照下面的方法来根据参数来格式化字符串:

 

 

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);

 

 

2、然后是数组的用法:

 

<string-array name="type_list">
        <item>全部</item>
        <item>充值记录</item>
        <item>网银消费</item>
        <item>充值消费</item>
    </string-array>

 

在java代码中照下面的方法来格式化数组:

 

getResources().getStringArray(R.array.type_list);

 

或者

 

this.getStringArray(R.array.type_list);

 

 

3、然后是image 图片资源的使用方法:

 

<string-array name="feed_icons">    
                <item>@drawable/latest</item>    
                <item>@drawable/video</item>    
                <item>@drawable/world</item>    
                <item>@drawable/sports</item>    
                <item>@drawable/arts</item>    
                <item>@drawable/dining</item>    
        </string-array> 

在java代码中使用方法:

 

 

Map<String, Object> map;    
        TypedArray ta = getResources().obtainTypedArray(R.array.feed_icons);    
        String[] titleArr = getResources().getStringArray(R.array.feed_names);    
        for(int i=0; i<titleArr.length; i++)    
        {    
            map = new HashMap<String, Object>();    
            map.put("icon", ta.getResourceId(i, 0));    
            map.put("title", titleArr[i]);    
            list.add(map);    
        } 

注意:TypedArray是关键,代码中去图片时候要这么用int id = ta.getResourceId(index, 0);

 

4、最后是字符串,这个最简单了。

 

<span style="white-space:pre">	</span><string name="old_pass">请输入旧密码</string>
<string name="new_pass">请输入新密码</string>
<string name="confirm_pass">请确认密码</string>

 取值很简单:

getResources().getString(R.string.name)

 

 

当然还可以直接在xml文件中使用,这里就不在赘述了!




另外,Html.fromHtml(text)支持的html标签却不只这些,具体有那些android平台并没有详细列举.在 HTML Tags Supported By TextView 有详细列举.但是额外的标签不能直接定义在xml中.貌似会被过滤掉.所以使用额外的标签时,必须用<![CDATA[ xx ]]>包围住.当然这样的字符串就不能直接在xml中调用了.只能通过代码使用.

 

<string name="welcome_info_2">        <![CDATA[欢迎你,<font color="#c5663e">%s</font>]]></string>

 

 

 

 

 

 

<think>好的,用户的问题是关于在Java中使用System.out.printf和String.format对浮点数进行精确的小数位数格式化。首先,我需要回忆一下Java中格式化输出的相关知识,特别是与浮点数相关的格式说明符。 我记得,Java中的格式化字符串使用百分号%来指定格式,对于浮点数,常用的格式说明符是%f。不过用户可能需要控制小数位数,这时候需要指定精度。比如%.2f应该会保留两位小数。此外,可能还需要考虑四舍五入的问题,以及如何格式化科学计数法或者其他格式。 接下来,我需要查阅相关的资料或者示例来确认这些用法是否正确。比如,用户提供的引用中提到了%tF、%tD等日期格式,但问题中的引用可能还有其他信息。比如引用[2]中提到了%tM、%tS等时间相关的格式,但可能对浮点数帮助不大。不过用户的问题明确是关于浮点数的,所以应该专注于%f和相关修饰符。 然后,我需要考虑用户可能的实际应用场景。例如,用户可能需要显示货币金额,这时候两位小数是常见的;或者科学计算中需要更多位数。同时,用户可能想知道如何同时控制字段宽度和小数位数,比如让数字右对齐并保留三位小数。 还要注意,String.format和System.out.printf使用相同的格式字符串,所以两者的方法应该是一致的。此外,可能需要提到BigDecimal在处理精确小数时的使用,但用户的问题主要是关于格式化输出,而不是数值计算。 另外,是否有其他格式选项,比如使用逗号作为千位分隔符?这在某些地区格式中常见,可能需要使用%,f或者本地化的设置。例如,使用Locale.US会显示点作为小数点,而其他地区可能使用逗号。这一点可能在用户的问题中也是相关的,尤其是在国际化应用中。 可能的示例包括: - 保留两位小数:%.2f - 四舍五入的处理方式 - 科学计数法:%e或%E - 组合字段宽度和精度,如%10.3f表示总宽度10字符,3位小数 - 千位分隔符的添加 需要确保这些示例在Java中是正确的,并且语法正确。例如,System.out.printf("%.2f", 123.4567); 应该输出123.46,而String.format("%.3f", 123.456789)会得到123.457。 同时,用户可能遇到的问题包括如何动态指定小数位数,这可能需要使用格式化字符串中的*通配符,并结合参数。例如,String.format("%.*f", 4, 123.456789)会保留四位小数,但需要确认Java是否支持这种语法。不过,Java的格式化实际上允许在格式字符串中使用参数索引来指定精度,比如%1$.2f中的1$表示第一个参数,但可能需要更多的例子来说明。 总结需要覆盖的点: 1. 基本的小数位数控制(%.nf) 2. 四舍五入的规则 3. 字段宽度与精度的组合 4. 科学计数法格式 5. 千位分隔符和本地化设置 6. 动态指定精度的方法 7. 使用BigDecimal处理精确的小数(如果需要) 现在需要组织这些信息,用中文清晰回答,并生成相关问题。</think>在Java中,使用`System.out.printf`和`String.format`进行浮点数的小数位格式化时,可通过**格式说明符**`%f`结合**精度控制符**实现。以下是具体方法和示例: --- ### 1. **基础格式化** - **语法**:`%.nf`(`n`为保留的小数位数) - **示例**: ```java double num = 123.456789; System.out.printf("保留两位小数:%.2f%n", num); // 输出:123.46 String result = String.format("保留三位小数:%.3f", num); // 123.457 ``` - 格式化时会自动四舍五入[^1]。 --- ### 2. **组合字段宽度与精度** - **语法**:`%m.nf`(`m`为总字符宽度,`n`为小数位数) - **示例**: ```java System.out.printf("总宽度8字符,两位小数:%8.2f%n", 5.678); // 输出: 5.68(左侧填充空格) ``` - 若数值宽度不足`m`,默认右对齐填充空格[^2]。 --- ### 3. **科学计数法格式化** - **语法**:`%e`(小写科学计数法)或`%E`(大写) - **示例**: ```java System.out.printf("科学计数法:%.2e%n", 12345.67); // 输出:1.23e+04 ``` --- ### 4. **千位分隔符与本地化** - **语法**:`%,f`(添加千位分隔符,依赖本地化设置) - **示例**: ```java double value = 1234567.89; System.out.printf(Locale.US, "带千位分隔符:%,.2f%n", value); // 输出:1,234,567.89 ``` - 使用`Locale.US`确保小数点用`.`,千位分隔符用`,`。 --- ### 5. **动态指定精度** - **语法**:`%.*f`(通过参数动态设置小数位数) - **示例**: ```java int precision = 4; System.out.printf("动态精度:%.*f%n", precision, 123.456789); // 输出:123.4568 ``` --- ### 6. **处理精确计算** 若需避免浮点数精度误差,建议先通过`BigDecimal`处理数值,再进行格式化: ```java BigDecimal exactNum = new BigDecimal("123.456789"); System.out.printf("%.3f", exactNum); // 123.457 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值