如何在 Android 中使用小空格作为数字分隔符?

How do I get tiny spaces as separator of numbers in Android?

为了让用户更容易知道确切的分数,我想用小空格分隔我的三个数字块(Unicode:SIX-PER-EM SPACE)。

我想要 1∼241∼234 而不是 1241234。

我试过了

DecimalFormat formatter = new DecimalFormat("# ### ### ### ###");
String score = formatter.format(getHighscore());

不幸的是,该代码给我一个错误。如何将我的 6 个 em 空间放入我的数字中?

错误:

FATAL EXCEPTION: main
Process: com.pairs.pairs, PID: 4296
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pairs.pairs/com.pairs.phoneme.TestingActivity}: android.view.InflateException: Binary XML file line #13: Binary XML file line #13: Error inflating class fragment
                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2547)
                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2613)
                                                                       at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1469)
                                                                       at android.os.Handler.dispatchMessage(Handler.java:111)
                                                                       at android.os.Looper.loop(Looper.java:207)
                                                                       at android.app.ActivityThread.main(ActivityThread.java:5695)
                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
                                                                    Caused by: android.view.InflateException: Binary XML file line #13: Binary XML file line #13: Error inflating class fragment
                                                                       at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
                                                                       at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
                                                                       at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
                                                                       at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:406)
                                                                       at android.app.Activity.setContentView(Activity.java:2190)
                                                                       at com.pairs.phoneme.TestingActivity.portraitLayout(TestingActivity.java:125)
                                                                       at com.pairs.phoneme.TestingActivity.onCreate(TestingActivity.java:76)
                                                                       at android.app.Activity.performCreate(Activity.java:6270)
                                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2500)
                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2613) 
                                                                       at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1469) 
                                                                       at android.os.Handler.dispatchMessage(Handler.java:111) 
                                                                       at android.os.Looper.loop(Looper.java:207) 
                                                                       at android.app.ActivityThread.main(ActivityThread.java:5695) 
                                                                       at java.lang.reflect.Method.invoke(Native Method) 
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) 
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749) 
                                                                    Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class fragment
                                                                       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782)
                                                                       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
                                                                       at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
                                                                       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
                                                                       at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
                                                                       at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                                                                       at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
                                                                       at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:406) 
                                                                       at android.app.Activity.setContentView(Activity.java:2190) 
                                                                       at com.pairs.phoneme.TestingActivity.portraitLayout(TestingActivity.java:125) 
                                                                       at com.pairs.phoneme.TestingActivity.onCreate(TestingActivity.java:76) 
                                                                       at android.app.Activity.performCreate(Activity.java:6270) 
                                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113) 
                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2500) 
                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2613) 
                                                                       at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1469) 
                                                                       at android.os.Handler.dispatchMessage(Handler.java:111) 
                                                                       at android.os.Looper.loop(Looper.java:207) 
                                                                       at android.app.ActivityThread.main(ActivityThread.java:5695) 
                                                                       at java.lang.reflect.Method.invoke(Native Method) 
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) 
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749) 
                                                                    Caused by: java.lang.IllegalArgumentException: # ### ### ### ###
                                                                       at java.text.DecimalFormat.initNative(DecimalFormat.java:564)
                                                                       at java.text.DecimalFormat.<init>(DecimalFormat.java:557)
                                                                       at java.text.DecimalFormat.<init>(DecimalFormat.java:535)
                                                                       at com.pairs.phoneme.Score.getHighScoreString(Score.java:103)
                                                                       at com.pairs.phoneme.fragments.ScoreAndTimeFragment.updateTopbarViews(ScoreAndTimeFragment.java:44)
                                                                       at com.pairs.phoneme.fragments.ScoreAndTimeFragment.onCreateView(ScoreAndTimeFragment.java:59)
                                                                       at android.app.Fragment.performCreateView(Fragment.java:2236)
                                                                       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:954)
                                                                       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1131)
                                                                       at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1233)
                                                                       at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2228)
                                                                       at android.app.FragmentController.onCreateView(FragmentController.java:98)
                                                                       at android.app.Activity.onCreateView(Activity.java:5579)
                                                                       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:754)
                                                                       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
                                                                       at android.view.LayoutInflater.rInflate(LayoutInflater.java:835) 
                                                                       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 
                                                                       at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
                                                                       at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                                                                       at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
                                                                       at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:406) 
                                                                       at android.app.Activity.setContentView(Activity.java:2190) 
                                                                       at com.pairs.phoneme.TestingActivity.portraitLayout(TestingActivity.java:125) 
                                                                       at com.pairs.phoneme.TestingActivity.onCreate(TestingActivity.java:76) 
                                                                       at android.app.Activity.performCreate(Activity.java:6270) 
                                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113) 
                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2500) 
                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2613) 
                                                                       at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1469) 
                                                                       at android.os.Handler.dispatchMessage(Handler.java:111) 
                                                                       at android.os.Looper.loop(Looper.java:207) 
                                                                       at android.app.ActivityThread.main(ActivityThread.java:5695) 
                                                                       at java.lang.reflect.Method.invoke(Native Method) 
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) 
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749) 

像这样尝试它应该工作

DecimalFormat formatter = new DecimalFormat("#,###,###,###,###");
String score = formatter.format(getHighscore()).replaceAll(",", " ");

您收到异常:

Caused by: java.lang.IllegalArgumentException: # ### ### ### ### at java.text.DecimalFormat.initNative(DecimalFormat.java:564)

我认为不能将空格传递给此构造函数。

我有一个不同的代码可以满足您的需要:

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);

DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator('\u2008');

formatter.setDecimalFormatSymbols(symbols);

Log.e("Formatted: ", formatter.format(1241234));