java - 将多个值格式化为列表
问题描述
是否有一种足够简单的方法可以像我一样显示多个值但只显示非零值?(我真的不知道如何解释这一点,而且我的英语不是很好,所以我会给你提供一些例子,这样你就可以更好地理解我想要实现的目标。)
例子:
- 输入:gallons=0,sickles=0,knuts=5。
- 输出(字符串):“5 knuts”。
- 输入:gallons=3,sickles=0,knuts=5。
- 输出(字符串):“3 加隆和 5 螺母。”
- 输入:galleyons=3,sickles=4,knuts=5。
- 输出(字符串):“3 艘大帆船、4 把镰刀和 5 个螺帽。”
实际代码:
public String knutsToString(int knuts) {
int galleons = knuts / 493;
int sickles = knuts / 29 - galleons * 17;
knuts -= sickles * 29 + galleons * 493;
return galleons + " galleons, " + sickles + " sickles and " + knuts + " knuts.";
}
解决方案
这样的事情会做:
static void print(int galleons, int sickles, int knuts) {
StringJoiner buf = new StringJoiner(", ");
add(buf, galleons, "galleon", "galleons");
add(buf, sickles, "sickle", "sickles");
add(buf, knuts, "knut", "knuts");
String text = buf.toString();
int idx = text.lastIndexOf(',');
if (idx != -1)
text = text.substring(0, idx) + " and" + text.substring(idx + 1);
System.out.println(text.isEmpty() ? "You are broke" : text);
}
private static void add(StringJoiner buf, int value, String singular, String plural) {
if (value != 0)
buf.add(value + " " + (value == 1 ? singular : plural));
}
测试
print(0, 0, 0);
print(0, 0, 5);
print(3, 0, 5);
print(3, 4, 5);
输出
You are broke
5 knuts
3 galleons and 5 knuts
3 galleons, 4 sickles and 5 knuts
请参阅IDEONE进行演示。
推荐阅读
- arrays - 相同的数组/msgbox 显示不同的消息
- oauth-2.0 - 是否可以在邮递员中自动执行 Azure 活动目录的 OAuth 2.0 隐式授权流程?
- modeling - 使用机器学习检测页面布局
- php - 如何使用php从数组多维更新表
- java - 带有正文 x-www-urlencode 授权类型、用户、密码的 Java Post 请求
- .net-core - ImageSharp 如何与 Asp.Net Mvc 控制器配合使用
- html - 如何避免在打印html时分页时破坏页面边框
- javascript - 如何防止在生产环境中编辑 React.js 代码?
- javascript - Chart.js 用于条形图的 onClick 函数
- xml - Oracle XMLDOM.GetNodeValue 有时返回 null