当前位置:  开发笔记 > 编程语言 > 正文

将逗号插入数字字符串

如何解决《将逗号插入数字字符串》经验,为你挑选了3个好方法。

嘿那里,我正在尝试对字符串执行向后正则表达式搜索,将其划分为3位数组.从AS3 文档中我可以看到,在reg ex引擎中无法向后搜索.

这个练习的目的是将三元组逗号插入到这样的数字中:

10000000 => 10,000,000

我想这样做:

string.replace(/(\d{3})/g, ",$1")

但这是不正确的,因为搜索没有从后面发生,替换$ 1只适用于第一场比赛.

我感觉我会更好地使用循环执行此任务.

更新:

由于AS3不支持前瞻,这就是我解决它的方法.

public static function formatNumber(number:Number):String
{
    var numString:String = number.toString()
    var result:String = ''

    while (numString.length > 3)
    {
        var chunk:String = numString.substr(-3)
        numString = numString.substr(0, numString.length - 3)
        result = ',' + chunk + result
    }

    if (numString.length > 0)
    {
        result = numString + result
    }

    return result
}

toolkit.. 48

如果您的语言支持正面预测断言,那么我认为以下正则表达式将起作用:

(\d)(?=(\d{3})+$)

在Java中演示:

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class CommifyTest {

    @Test
    public void testCommify() {
        String num0 = "1";
        String num1 = "123456";
        String num2 = "1234567";
        String num3 = "12345678";
        String num4 = "123456789";

        String regex = "(\\d)(?=(\\d{3})+$)";

        assertEquals("1", num0.replaceAll(regex, "$1,"));
        assertEquals("123,456", num1.replaceAll(regex, "$1,"));
        assertEquals("1,234,567", num2.replaceAll(regex, "$1,"));
        assertEquals("12,345,678", num3.replaceAll(regex, "$1,"));
        assertEquals("123,456,789", num4.replaceAll(regex, "$1,"));    
    }    
}

以下链接表明AS3有吗?



1> toolkit..:

如果您的语言支持正面预测断言,那么我认为以下正则表达式将起作用:

(\d)(?=(\d{3})+$)

在Java中演示:

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class CommifyTest {

    @Test
    public void testCommify() {
        String num0 = "1";
        String num1 = "123456";
        String num2 = "1234567";
        String num3 = "12345678";
        String num4 = "123456789";

        String regex = "(\\d)(?=(\\d{3})+$)";

        assertEquals("1", num0.replaceAll(regex, "$1,"));
        assertEquals("123,456", num1.replaceAll(regex, "$1,"));
        assertEquals("1,234,567", num2.replaceAll(regex, "$1,"));
        assertEquals("12,345,678", num3.replaceAll(regex, "$1,"));
        assertEquals("123,456,789", num4.replaceAll(regex, "$1,"));    
    }    
}

以下链接表明AS3有吗?


我更喜欢这个,假设你可以使用lookbehinds:(?<=\d)(?=(\ d {3})+ $)这样,你可以简单地用","替换而不是替换为"\ 1, ".

2> 小智..:

在http://gskinner.com/RegExr/上找到

社区>数千个分隔符

图案: /\d{1,3}(?=(\d{3})+(?!\d))/g

更换: $&,

trace ( String("1000000000").replace( /\d{1,3}(?=(\d{3})+(?!\d))/g , "$&,") );

它完成了这项工作!



3> Niki..:

如果您的正则表达式引擎具有正向前瞻,您可以执行以下操作:

string.replace(/(\d)(?=(\d\d\d)+$)/, "$1,")

正向前瞻(?= ...)意味着正则表达式仅在前瞻表达式匹配时匹配.

(注意,环绕表达式并不总是很有效.)


对于ActionScript,您需要添加"g"/全局标志:trace("1234567".replace(/(\ d)(?=(\ d\d\d)+ $)/ g,"$ 1,") );
推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有