gpt4 book ai didi

android - 没有符号编辑框的货币输入

转载 作者:太空狗 更新时间:2023-10-29 14:28:29 27 4
gpt4 key购买 nike

我正在尝试为我的 Android 应用程序创建一个正则表达式,以便货币的格式与此问题的最佳答案相同:

public void onTextChanged(CharSequence s, int start,

int before, int count) {
if(!s.toString().matches("^\\$(\\d{1,3}(\\,\\d{3})*|(\\d+))(\\.\\d{2})?$"))
{
String userInput= ""+s.toString().replaceAll("[^\\d]", "");
StringBuilder cashAmountBuilder = new StringBuilder(userInput);

while (cashAmountBuilder.length() > 3 && cashAmountBuilder.charAt(0) == '0') {
cashAmountBuilder.deleteCharAt(0);
}
while (cashAmountBuilder.length() < 3) {
cashAmountBuilder.insert(0, '0');
}
cashAmountBuilder.insert(cashAmountBuilder.length()-2, '.');
cashAmountBuilder.insert(0, '$');

cashAmountEdit.setText(cashAmountBuilder.toString());
}

}

Android Money Input with fixed decimal

我希望能够实现与该示例相同的格式,只是在数字前减去美元符号,但我真的不确定如何更改该代码来实现它,或者是否有其他方法?

编辑:在我看来,经过更多评论后,这可能不是我的这段代码。我可以通过在正则表达式中将美元符号更改为空格并在数字前输入空格,稍后在我需要该值时对其进行修整来使用非常愚蠢的锻炼来实现此目的,但我找不到更好的方法变通。

private TextWatcher billWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

public void onTextChanged(CharSequence s, int start, int before, int count) {
if(!s.toString().matches("^\\$(\\d{1,3}(\\,\\d{3})*|(\\d+))(\\.\\d{2})?$"))
{
String userInput= ""+s.toString().replaceAll("[^\\d]", "");
StringBuilder cashAmountBuilder = new StringBuilder(userInput);

while (cashAmountBuilder.length() > 3 && cashAmountBuilder.charAt(0) == '0') {
cashAmountBuilder.deleteCharAt(0);
}
while (cashAmountBuilder.length() < 3) {
cashAmountBuilder.insert(0, '0');
}
cashAmountBuilder.insert(cashAmountBuilder.length()-2, '.');
cashAmountBuilder.insert(0, '$');

billBox.setText(cashAmountBuilder.toString());
billBox.setTextKeepState(cashAmountBuilder.toString());
Selection.setSelection(billBox.getText(), cashAmountBuilder.toString().length());
}
}

框的 XML

 <EditText
android:id="@+id/billBox"
android:layout_width="152dp"
android:layout_height="40dp"
android:layout_alignParentLeft="true"
android:layout_below="@+id/billText"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:digits="0123456789."
android:gravity="right"
android:inputType="numberDecimal" />

最佳答案

你有:<EditText ... android:digits="0123456789." ... />

然而你的正则表达式有 \\$(\\d{1,3}... 。翻译成“美元符号后跟更多数字。”

我认为系统感到困惑,因为您要求出现美元符号,但在您的 XML 中禁止它。

我会取出正则表达式的第一部分并为用户输入美元符号。

关于android - 没有符号编辑框的货币输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364481/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com