如何删除长字符串的前导零
How to remove leading zeros with long string
我正在尝试从 java
中有多个其他字符串和数字的字符串中删除前导零
so ow - 00250 = 00000000 ]
对于上述输入,我试图让输出成为
so ow - 250 = 0 ]
我试过了
removeLeadingZeros(str.trim().replaceAll(" +", " ")
removeLeadingZeros 在哪里
// Regex to remove leading
// zeros from a string
String regex = "^0+(?!$)";
// Replaces the matched
// value with given string
str = str.replaceAll(regex, "");
return str;
但我得到了输出
so ow - 00250 = 00000000 ]
与原始输入相同。
这些方法似乎只适用于字符串中的第一个元素,如果它是一个数字,例如
00015039 so ow + - 003948 83
哪个return
15039 so ow + - 003948 83
但想return
15039 so ow + - 3948 83
谢谢!
您可以在每个 space 个字符处拆分字符串,然后通过您的函数处理每个子字符串,然后再次将它们连接在一起。
String[] substrings = myString.split(" ", 0);
for (int i = 0; i < substring.length; i++) {
substrings[i] = removeLeadingZeros(substrings[i]);
}
myString = String.Join(" ", substrings);
此代码未经测试。我是从我的 phone 开始写这篇文章的,所以我无法完成它的进度。希望总体思路能够通过。
通过将给定的字符串拆分为数组然后删除前导零,效果很好。
其中 removeLeadingZeros 是:
public static String removeLeading(String str) {
String regex = "^0+(?!$)";
String x[] = str.split(" ");
StringBuilder z = new StringBuilder();
for(String y:x) {
str = y.replaceAll(regex, "");
z.append(" " + str);
}
return z.toString();
}
tl;博士
Arrays
.stream( input.split( " " ) )
.filter( s -> ! s.isBlank() )
.map(
s -> {
try{
return String.valueOf( Integer.parseInt( s ) ) ;
} catch ( NumberFormatException e ) {
return s ;
}
}
)
.collect( Collectors.joining( " " ) )
拆分成多个部分,将每个部分解析为 int
我会将字符串分成几部分,用 SPACE 个字符分隔。
input.split( " " )
拆分结果为一个数组。制作该数组的流。
String input = "so ow - 00250 = 00000000 ]" ;
String output =
Arrays
.stream( input.split( " " ) )
…
所有这些额外的空格将导致一堆空字符串块,其中没有文本。所以过滤掉那些。
而且我们要消除空格和空字符串,所以调用 String#isBlank
而不是 String#isEmpty
。
.filter( s -> ! s.isBlank() )
尝试将每个部分解析为整数。如果解析失败,则抛出异常。陷阱那个例外。如果被捕获,只需 return 解析失败的文本。如果没有例外,return 新生成的 int
值的字符串。
.map(
s -> {
try{
int x = Integer.parseInt( s ) ;
return String.valueOf( x ) ;
} catch ( NumberFormatException e ) {
return s ; // Dismiss the exception.
}
}
)
收集所有剩余的和 newly-created 部分,并以 SPACE 作为分隔符。
.collect( Collectors.joining( " " ) )
代码示例
将所有代码放在一起看起来像这样:
String input = "so ow - 00250 = 00000000 ]" ;
String output =
Arrays
.stream( input.split( " " ) )
.filter( s -> ! s.isBlank() )
.map(
s -> {
try{
int x = Integer.parseInt( s ) ;
return String.valueOf( x ) ;
} catch ( NumberFormatException e ) {
return s ; // Swallow the exception.
}
}
)
.collect( Collectors.joining( " " ) )
;
System.out.println( output ) ;
看到code run live at IdeOne.com。
so ow - 250 = 0 ]
您可以使用
String result = text.replaceAll("\b(?<!\d[,.])(?:(0)+\b|0+(?=[1-9]))", "").replaceAll("(?U)\s+", " ").trim();
参见regex demo。
根据输入的混乱程度,您可能需要调整甚至扩展解决方案。 详情:
\b(?<!\d[,.])
- 单词边界,右边必须有字符串开头或 non-word 字符,左边不能有数字+点或逗号当前位置的(即我们排除小数位匹配)
(?:(0)+\b|0+(?=[1-9]))
- 两种模式之一:
(0)+\b
- 0
,一次或多次,最后一个0
保存在第1组,后面跟一个词边界
|
- 或
0+(?=[1-9])
- 一个或多个 0
个字符后跟一个 non-zero 数字。
.replaceAll("(?U)\s+", " ")
将任何 Unicode 白色 space 字符块缩小为单个 ASCII space.
我正在尝试从 java
中有多个其他字符串和数字的字符串中删除前导零so ow - 00250 = 00000000 ]
对于上述输入,我试图让输出成为
so ow - 250 = 0 ]
我试过了
removeLeadingZeros(str.trim().replaceAll(" +", " ")
removeLeadingZeros 在哪里
// Regex to remove leading
// zeros from a string
String regex = "^0+(?!$)";
// Replaces the matched
// value with given string
str = str.replaceAll(regex, "");
return str;
但我得到了输出
so ow - 00250 = 00000000 ]
与原始输入相同。
这些方法似乎只适用于字符串中的第一个元素,如果它是一个数字,例如
00015039 so ow + - 003948 83
哪个return
15039 so ow + - 003948 83
但想return
15039 so ow + - 3948 83
谢谢!
您可以在每个 space 个字符处拆分字符串,然后通过您的函数处理每个子字符串,然后再次将它们连接在一起。
String[] substrings = myString.split(" ", 0);
for (int i = 0; i < substring.length; i++) {
substrings[i] = removeLeadingZeros(substrings[i]);
}
myString = String.Join(" ", substrings);
此代码未经测试。我是从我的 phone 开始写这篇文章的,所以我无法完成它的进度。希望总体思路能够通过。
通过将给定的字符串拆分为数组然后删除前导零,效果很好。
其中 removeLeadingZeros 是:
public static String removeLeading(String str) {
String regex = "^0+(?!$)";
String x[] = str.split(" ");
StringBuilder z = new StringBuilder();
for(String y:x) {
str = y.replaceAll(regex, "");
z.append(" " + str);
}
return z.toString();
}
tl;博士
Arrays
.stream( input.split( " " ) )
.filter( s -> ! s.isBlank() )
.map(
s -> {
try{
return String.valueOf( Integer.parseInt( s ) ) ;
} catch ( NumberFormatException e ) {
return s ;
}
}
)
.collect( Collectors.joining( " " ) )
拆分成多个部分,将每个部分解析为 int
我会将字符串分成几部分,用 SPACE 个字符分隔。
input.split( " " )
拆分结果为一个数组。制作该数组的流。
String input = "so ow - 00250 = 00000000 ]" ;
String output =
Arrays
.stream( input.split( " " ) )
…
所有这些额外的空格将导致一堆空字符串块,其中没有文本。所以过滤掉那些。
而且我们要消除空格和空字符串,所以调用 String#isBlank
而不是 String#isEmpty
。
.filter( s -> ! s.isBlank() )
尝试将每个部分解析为整数。如果解析失败,则抛出异常。陷阱那个例外。如果被捕获,只需 return 解析失败的文本。如果没有例外,return 新生成的 int
值的字符串。
.map(
s -> {
try{
int x = Integer.parseInt( s ) ;
return String.valueOf( x ) ;
} catch ( NumberFormatException e ) {
return s ; // Dismiss the exception.
}
}
)
收集所有剩余的和 newly-created 部分,并以 SPACE 作为分隔符。
.collect( Collectors.joining( " " ) )
代码示例
将所有代码放在一起看起来像这样:
String input = "so ow - 00250 = 00000000 ]" ;
String output =
Arrays
.stream( input.split( " " ) )
.filter( s -> ! s.isBlank() )
.map(
s -> {
try{
int x = Integer.parseInt( s ) ;
return String.valueOf( x ) ;
} catch ( NumberFormatException e ) {
return s ; // Swallow the exception.
}
}
)
.collect( Collectors.joining( " " ) )
;
System.out.println( output ) ;
看到code run live at IdeOne.com。
so ow - 250 = 0 ]
您可以使用
String result = text.replaceAll("\b(?<!\d[,.])(?:(0)+\b|0+(?=[1-9]))", "").replaceAll("(?U)\s+", " ").trim();
参见regex demo。
根据输入的混乱程度,您可能需要调整甚至扩展解决方案。 详情:
\b(?<!\d[,.])
- 单词边界,右边必须有字符串开头或 non-word 字符,左边不能有数字+点或逗号当前位置的(即我们排除小数位匹配)(?:(0)+\b|0+(?=[1-9]))
- 两种模式之一:(0)+\b
-0
,一次或多次,最后一个0
保存在第1组,后面跟一个词边界|
- 或0+(?=[1-9])
- 一个或多个0
个字符后跟一个 non-zero 数字。
.replaceAll("(?U)\s+", " ")
将任何 Unicode 白色 space 字符块缩小为单个 ASCII space.