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