Java 是否将字符串中的所有逗号替换为句点,反之亦然?

Java 是否将字符串中的所有逗号替换为句点,反之亦然?,java,string,kotlin,java-stream,sequence,Java,String,Kotlin,Java Stream,Sequence,如果可能的话,尝试通过使用Kotlin序列在一次过程中解决这个问题。我不认为基于区域设置的数字格式是可能的,因为我有时会有字符串抛出NumberFormatException,比如1。或1。需要在没有任何数字转换的情况下执行此操作 12,345.6789 -> 12.345,6789 12.345,6789 -> 12,345.6789 . -> , -> 1, 这可能是一个非常幼稚的解决方案,但如果您知道字符串中只有数字,那么这就行了 var oldString=12345.6789 var

如果可能的话,尝试通过使用Kotlin序列在一次过程中解决这个问题。我不认为基于区域设置的数字格式是可能的,因为我有时会有字符串抛出NumberFormatException,比如1。或1。需要在没有任何数字转换的情况下执行此操作

12,345.6789 -> 12.345,6789 12.345,6789 -> 12,345.6789 . -> , -> 1,
这可能是一个非常幼稚的解决方案,但如果您知道字符串中只有数字,那么这就行了

var oldString=12345.6789 var newString=oldString .替换“.”,“x” .替换“,”,“。” .替换“x”、“x”、“x” 打印新闻字符串 // 12.345,6789
这可能是一个非常幼稚的解决方案,但如果您知道字符串中只有数字,那么这就行了

var oldString=12345.6789 var newString=oldString .替换“.”,“x” .替换“,”,“。” .替换“x”、“x”、“x” 打印新闻字符串 // 12.345,6789
您可以将一个字符替换为未使用的字符:

String str = "1234.123213,414";
str = str.replace(",", "+");
str = str.replace(".", ",");
str = str.replace("+", ".");
System.out.println("str = " + str); 
// Output: str = 1234,123213.414

您可以将一个字符替换为未使用的字符:

String str = "1234.123213,414";
str = str.replace(",", "+");
str = str.replace(".", ",");
str = str.replace("+", ".");
System.out.println("str = " + str); 
// Output: str = 1234,123213.414

您可以为此目的使用此代码:-

String num = "12,345.6789";
//Replacing all '.' to '}' Just for the sake of simplicity
String transformednum = num.replace('.', '}');
//Replacing all ',' to '.'  First Thing you want
transformednum = transformednum.replace(',', '.');
//Replacing all '}' to ','   Second thing you want 
transformednum = transformednum.replace('}', ',');
System.out.println(transformednum);

希望这会有所帮助。

您可以将此代码用于此目的:-

String num = "12,345.6789";
//Replacing all '.' to '}' Just for the sake of simplicity
String transformednum = num.replace('.', '}');
//Replacing all ',' to '.'  First Thing you want
transformednum = transformednum.replace(',', '.');
//Replacing all '}' to ','   Second thing you want 
transformednum = transformednum.replace('}', ',');
System.out.println(transformednum);
    String in = "12,345.6789";

    Pattern p = Pattern.compile("[,.]");
    Matcher m = p.matcher(in);
    StringBuilder sb = new StringBuilder();

    while (m.find()) {
        m.appendReplacement(sb, m.group().equals(".") ? "," : ".");
    }

    m.appendTail(sb);

    System.out.println(sb.toString());
希望这会有所帮助

    String in = "12,345.6789";

    Pattern p = Pattern.compile("[,.]");
    Matcher m = p.matcher(in);
    StringBuilder sb = new StringBuilder();

    while (m.find()) {
        m.appendReplacement(sb, m.group().equals(".") ? "," : ".");
    }

    m.appendTail(sb);

    System.out.println(sb.toString());
可以为子字符串b替换子字符串a的任何匹配项

但是,要进行交换,您需要应用此方法三次,如下所示:

String number = "123,456.05";
number = number.replaceAll(",", "&").replaceAll(".", ",").replaceAll("&", ".");
通常,要交换字符,如下所示:

用逗号替换占位符子字符串可以是任何内容,真的 将所有点转换为逗号 将占位符转换为点。 如果没有占位符,您将得到所有逗号

number.replaceAll(",", ".").replaceAll(".", ",");
//this would transform commas into dots, then the same transformed commas would become commas again.
可以为子字符串b替换子字符串a的任何匹配项

但是,要进行交换,您需要应用此方法三次,如下所示:

String number = "123,456.05";
number = number.replaceAll(",", "&").replaceAll(".", ",").replaceAll("&", ".");
通常,要交换字符,如下所示:

用逗号替换占位符子字符串可以是任何内容,真的 将所有点转换为逗号 将占位符转换为点。 如果没有占位符,您将得到所有逗号

number.replaceAll(",", ".").replaceAll(".", ",");
//this would transform commas into dots, then the same transformed commas would become commas again.

如何使用流:

static String swapChars(String str, String c1, String c2)
{
    return Stream.of(str.split(c1, -1))
          .map (elem -> elem.replace(c2, c1))
          .collect(Collectors.joining(c2));
}
测试:

输出:

12,345.6789 -> 12.345,6789
12.345,6789 -> 12,345.6789
. -> ,
1. -> 1,
1, -> 1.

如何使用流:

static String swapChars(String str, String c1, String c2)
{
    return Stream.of(str.split(c1, -1))
          .map (elem -> elem.replace(c2, c1))
          .collect(Collectors.joining(c2));
}
测试:

输出:

12,345.6789 -> 12.345,6789
12.345,6789 -> 12,345.6789
. -> ,
1. -> 1,
1, -> 1.

一蹴而就。不使用任何Kotlin,我只能编写Java

    String s = "12,345.6789";
    char[] ca = s.toCharArray();
    for (int i = 0; i < ca.length; i++) {
        if (ca[i] == '.') {
            ca[i] = ',';
        } else if (ca[i] == ',') {
            ca[i] = '.';
        }
    }
    s = new String(ca);
    System.out.println(s);
输出:

12,345.6789 -> 12.345,6789
12.345,6789 -> 12,345.6789
. -> ,
1. -> 1,
1, -> 1.
12.3456789

它的级别相当低,所以请将其包装到一个名称不错的方法中。否则我认为这是直截了当的。如果您喜欢使用StringBuffer或StringBuilder,这些也是选项


不过,如果是我的话,我会再考虑一下数字解析和格式设置。

。不使用任何Kotlin,我只能编写Java

    String s = "12,345.6789";
    char[] ca = s.toCharArray();
    for (int i = 0; i < ca.length; i++) {
        if (ca[i] == '.') {
            ca[i] = ',';
        } else if (ca[i] == ',') {
            ca[i] = '.';
        }
    }
    s = new String(ca);
    System.out.println(s);
输出:

12,345.6789 -> 12.345,6789
12.345,6789 -> 12,345.6789
. -> ,
1. -> 1,
1, -> 1.
12.3456789

它的级别相当低,所以请将其包装到一个名称不错的方法中。否则我认为这是直截了当的。如果您喜欢使用StringBuffer或StringBuilder,这些也是选项

不过,如果是我,我会再考虑一下数字解析和格式设置。

只需使用字符串::替换,如下所示:

public class Main {
    public static void main(String args[]) {
        // Tests
        System.out.println(swapCommaWithDot("1,123,345.6789"));
        System.out.println(swapCommaWithDot("1.123.345,6789"));
    }

    static String swapCommaWithDot(String n) {
        return n.replace(",", ",.").replace(".", ",").replace(",.", ".").replace(",,", ".");
    }
}
输出:

12,345.6789 -> 12.345,6789
12.345,6789 -> 12,345.6789
. -> ,
1. -> 1,
1, -> 1.
只需使用String::replace,如下所示:

public class Main {
    public static void main(String args[]) {
        // Tests
        System.out.println(swapCommaWithDot("1,123,345.6789"));
        System.out.println(swapCommaWithDot("1.123.345,6789"));
    }

    static String swapCommaWithDot(String n) {
        return n.replace(",", ",.").replace(".", ",").replace(",.", ".").replace(",,", ".");
    }
}
输出:

12,345.6789 -> 12.345,6789
12.345,6789 -> 12,345.6789
. -> ,
1. -> 1,
1, -> 1.
可以对字符串使用map函数,并使用joinToString转换结果列表。替换只需一次,但必须将其复制回字符串

fun String.swapCommasAndDots() = map { c ->
    when (c) {
        ',' -> '.'
        '.' -> ','
        else -> c
    }
}.joinToString("")
可以对字符串使用map函数,并使用joinToString转换结果列表。替换只需一次,但必须将其复制回字符串

fun String.swapCommasAndDots() = map { c ->
    when (c) {
        ',' -> '.'
        '.' -> ','
        else -> c
    }
}.joinToString("")

@尤金怎么了?12345.6789.全部替换。能给我12.345.6789吗?对,我提供了answer@nicoqueijo-您可以使用字符串::替换。检查。绳子是从哪里来的?大概它是从一个数字开始的;有没有任何选项可以在第一时间更改它转换为字符串的方式,以避免以后再处理它?关于您在软件工程上发布的关于Github页面的问题,您应该向Google Play提交一份DMCA删除通知:@Eugene how?12345.6789.全部替换。能给我12.345.6789吗?对,我提供了answer@nicoqueijo-您可以使用字符串::替换。检查。绳子是从哪里来的?大概它是从一个数字开始的;有没有任何选项可以在一开始就改变它转换为字符串的方式,以避免以后再处理它?关于您在软件工程上发布的关于Github页面的问题,你应该向Google Play提交一份DMCA删除通知:我真的不知道你的解决方案如何更简单。更简单的意思是,如果输入中存在x,它不会崩溃;不像你的。我的意思是更容易推理。当然,但我认为他是在为他的用例寻求一个简单的解决方案。因此,我认为实例化3个对象并进行while循环毫无意义。从我阅读问题的理解来看,字符串由数字、逗号和句点表示。因此,我认为简化解决方案没有问题实例化3个对象。您正在实例化四个中间对象,只是隐藏
使用替换呼叫。但是,最昂贵的方面是在操作过程中复制整个字符串内容,这在这里发生了三次,在另一个解决方案中只发生了一次。我真的不知道您的解决方案如何更容易。更容易的是,如果输入中存在x,它将不会中断;不像你的。我的意思是更容易推理。当然,但我认为他是在为他的用例寻求一个简单的解决方案。因此,我认为实例化3个对象并进行while循环毫无意义。从我阅读问题的理解来看,字符串由数字、逗号和句点表示。因此,我认为简化解决方案没有问题实例化3个对象。您正在实例化四个中间对象,只是隐藏在replace调用中。但最昂贵的方面是在操作过程中复制整个字符串内容,这在这里发生三次,在另一个解决方案中只发生一次。这些也是选项,但它们没有任何特殊的优势,考虑到您只是在更改字符值,而不是插入或删除。@AndyTurner在这里显示了实现细节,但对于参考实现和Java 9或更新版本,使用StringBuilder可以使用每个字符一个字节而不是两个字节来执行整个操作。相比之下,使用char[]不仅没有这种潜力,还需要字符串构造函数检查数组是否包含非拉丁-1字符。这些也是选项,但它们没有任何特殊的优势,考虑到您只是在更改字符值,而不是插入或删除。@AndyTurner在这里显示了实现细节,但对于参考实现和Java 9或更新版本,使用StringBuilder可以使用每个字符一个字节而不是两个字节来执行整个操作。相比之下,使用char[]不仅没有这种潜力,还需要字符串构造函数检查数组是否包含非拉丁-1字符。在旧版本中,您需要StringBuffer。但当您使用Java 9或更新版本时,也可以使用Pattern.compile[,.].matcher 123.456789.replaceAllmr->mr.group.equals.?,:。。Java 9中添加了StringBuilder支持。在旧版本中,您需要StringBuffer。但当您使用Java 9或更新版本时,也可以使用Pattern.compile[,.].matcher 123.456789.replaceAllmr->mr.group.equals.?,:。。