Android中%s %d %1$s %1$d %f以及空格占位符的使用

本文探讨了在Android开发中使用占位符优化TextView内容拼接的技巧,介绍了常见占位符类型如%s、%d、%f及%n$s,并通过实例展示了如何在布局文件和代码中应用,提高开发效率。

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

一、引言

我们在开发中经常会遇到这样的场景,就是给一个TextView设置内容时,有一部分是Android端写死的提示,有一部分是从后台服务器端获取的数据进行展示。 我们要将这几部分内容拼接在一起显示在一个TextView控件中。

按照我之前的想发和思路有两种解决办法:

①有几部分内容就使用几个TextView控件。

②使用(+)连接符或者是StringBuilder、StringBuffer将这些内容拼接在一起再显示到一个控件中。

那么接下来我谈下这两种解决方法的弊端所在:首先第一种我们会在xml文件中写好多个TextView,还要注意对齐方式啊。更重要的是假如这里的变量内容有二三十个呢?那岂不是得写到手抽筋。。。第二种拼接方式我觉得如果使用+号的话,我们的代码里会看到好多的硬代码,修改起来也不方便,影响整体的代码整洁性。如果使用StringBuilder、StringBuffer的拼接的话,我们还要创建好多个这样的对象。所以也不是很好的选择。那么有没有一种办法能够相对很完美的解决呢,这个时候就需要占位符闪亮登场了。

二、了解常用的占位符

%s:表示字符串类型的占位符

%d:表示整型占位符

%f:表示浮点型占位符 如果需保留小数点后两位:%.2f

%n$s:这样写也表示字符串的占位符,只不过这样写会更加的具体些(指定了索引位置),意思就是具体的第几个参数需要动态变化写内容。结合String.format()方法,它可以很给力的计算出你的string.xml中有多少个占位符,就让你可以填充多少个参数。(建议使用第二种)

     这里的 n  代表第n个参数,如%2代表的是第2个参数;$是结束符;

空格占位符:

&#32:普通的英文半角空格

  ==   ==   == no-break space (普通的英文半角空格但不换行)

  == 中文全角空格 (一个中文宽度)

  ==   == en空格 (半个中文宽度)

  ==   == em空格 (一个中文宽度)

  == 四分之一em空格 (四分之一中文宽度)

相比平时的空格( ),nbsp拥有不间断(non-breaking)特性。即连续的nbsp会在同一行内显示。即使有100个连续的nbsp,浏览器也不会把它们拆成两行。

&#160 这样的空格,用String的 trim();方法是去不掉的! 因为 &#160 这些东西 trim();不当他们是空格!

三、举例使用

1.layout布局文件引用

<TextView
    android:id="@+id/tv_oil_station_integral_discount"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="120dp"
    android:layout_marginRight="12dp"
    android:layout_toLeftOf="@+id/cb_oil_station_integral"
    android:textColor="@color/color_333333"
    android:textSize="@dimen/text_15"
    tools:text="@string/text_yuan" />

 2.string.xml文件

<string name="text_yuan">-%1$d元</string>

3.Activity

 TextView mTvHjyIntegralDiscount = findViewById(R.id.tv_hjy_integral_discount);
mTvHjyIntegralDiscount.setText(String.format(getResources().getString(R.string.text_yuan),integralDiscountBean.hjy_credit.deduction_money));   //-10元

如果是字符型:

<string name="my_info">我叫%1$s,%2$s6,不信可以%3$s一起玩!</string>
 String s = String.format(getResources().getString(R.string.my_info), "梁超杰", "王者荣耀","明天");
 textView.setText(s);

空格占位符的使用:

<string name="tv_item_order_number">订单编号:&#160;&#160;&#160;%1$s</string>
<string name="oil_card_explain_desc">&#8195;&#8195;代办加油卡为有效期6年的江苏个人记名卡,卡内没有余额。\n&#8195;&#8195;代理办卡时中石化会给客户发一条预约成功的短信,请客户务必填写与办卡姓名一致的手机号码(17或者14开头的虚拟号段无法预约办理)。</string>

使用的时候直接在xml文件中使用就行了

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="7dp"
    android:letterSpacing="0.05"
    android:lineSpacingMultiplier="1.2"
    android:text="@string/oil_card_explain_desc"
    android:textColor="@color/color_666666"
    android:textSize="@dimen/text_13"/>

 

 

 

 

 

 

 

<think>嗯,用户现在问的是Go语言中%d占位符的作用。我需要先回顾一下之前的对话历史,看看用户之前问过什么问题,这样能更好地理解他们的需求。 之前用户问过关于遍历map的Go代码解释,涉及到了格式化字符串中的%02d。现在他们可能是在进一步深入了解格式化字符串中的占位符,特别是%d的用法。可能他们在实际编码中遇到了问题,或者想更详细地理解不同占位符的区别和用途。 首先,我要确认%d的基本作用。%d在Go中用于格式化整数,将整数值以十进制形式输出。这和C语言中的用法类似,但用户可能对Go的具体细节不太清楚。需要解释清楚%d的作用,同时可能需要对比其他占位符,比如%f%s,这样用户能更好地区分。 接下来,用户可能想知道不同修饰符的作用,比如%02d中的0和2。之前在遍历map的例子中用了%02d来生成stu00这样的字符串,用户可能对这部分有疑问,所以需要详细解释这些修饰符如何影响输出格式。 还要考虑用户可能的实际应用场景。比如,他们可能在处理需要对齐的数字,如生成固定长度的ID,或者在输出表格数据时需要数字右对齐。这时候,%d的修饰符就非常有用,比如指定最小宽度、填充字符等。 另外,用户可能对错误使用占位符的情况感兴趣。例如,如果使用%d来格式化非整数类型,会导致什么问题?需要提醒用户注意类型匹配,避免运行时错误。 此外,可能需要给出一些实际的例子,说明不同情况下%d的表现。比如,普通使用、带宽度修饰符、左对齐、填充0等。这样用户可以通过例子更直观地理解每个修饰符的效果。 还要考虑到用户的知识水平。他们可能已经了解基本的格式化输出,但想深入掌握更高级的用法。因此,除了基础解释外,提供进阶用法和常见问题会更有帮助。 最后,总结一下%d的作用,强调其在不同场景下的实用性,并提醒使用时需要注意的类型匹配问题。这样用户就能全面理解%d的用法,避免常见错误,并能在实际开发中灵活应用。</think>在Go语言中,`%d` 是格式化字符串中的占位符,专门用于处理 **整数类型** 的格式化输出。以下是详细说明: --- ### 一、核心作用 1. **十进制整数格式化** - 将整数值转换为十进制(base 10)字符串形式 - 支持所有整数类型:`int`, `int8`, `int16`, `int32`, `int64` 及其无符号版本 2. **语法格式** ```go fmt.Printf("格式化字符串", 整数值) ``` 示例: ```go age := 25 fmt.Printf("年龄:%d 岁", age) // 输出:年龄:25 岁 ``` --- ### 二、进阶用法(修饰符) 通过在 `%d` 中插入修饰符,可以控制输出的具体格式: | 修饰符格式 | 作用说明 | 示例代码 | 输出结果 | |--------------|-----------------------------|--------------------------------|-------------| | `%d` | 基础十进制格式 | `fmt.Printf("%d", 7)` | `7` | | `%5d` | **右对齐**,最小宽度5字符 | `fmt.Printf("%5d", 7)` | `    7`(左侧4空格) | | `%-5d` | **左对齐**,最小宽度5字符 | `fmt.Printf("%-5d", 7)` | `7    `(右侧4空格) | | `%05d` | 用零填充空白 | `fmt.Printf("%05d", 7)` | `00007` | | `%+d` | 显示正负号 | `fmt.Printf("%+d", 7)` | `+7` | --- ### 三、典型应用场景 1. **ID补零处理** ```go id := 3 fmt.Printf("用户ID:stu%03d", id) // 输出:用户ID:stu003 ``` 2. **表格对齐输出** ```go fmt.Printf("%-8s | %5d\n", "苹果", 15) // 左对齐名称,右对齐数量 fmt.Printf("%-8s | %5d\n", "香蕉", 200) // 输出: // 苹果 | 15 // 香蕉 | 200 ``` 3. **结合其他占位符** ```go fmt.Printf("坐标:(x:%04d, y:%04d)", 12, 5) // 输出:坐标:(x:0012, y:0005) ``` --- ### 四、注意事项 1. **类型匹配错误** ```go // 错误示例:尝试格式化浮点数为%d price := 9.99 fmt.Printf("%d", price) // 编译通过但运行时崩溃:%d需要整数类型 ``` 2. **自动类型转换** ```go var count int32 = 100 fmt.Printf("%d", count) // 安全:int32自动匹配%d ``` 3. **与 `%v` 的区别** ```go n := 42 fmt.Printf("%d", n) // 显式指定十进制格式 → 42 fmt.Printf("%v", n) // 通用占位符自动判断类型 → 42 ``` --- ### 五、与其他占位符对比 | 占位符 | 适用类型 | 示例输出 | |--------|-------------------|-------------------| | `%d` | 整数 | `2023` | | `%f` | 浮点数 | `3.141593` | | `%s` | 字符串 | `hello` | | `%t` | 布尔值 | `true` | | `%x` | 十六进制整数/字节 | `1a3f` | 通过灵活使用 `%d` 及其修饰符,可以实现精确的整数格式化控制,这在处理日志、报表生成、数据对齐等场景中非常实用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值