我想在没有括号的情况下将电话号码中的区号和前一号码分开,所以我这样做了。
c[0]::-> Length::->0
c[1]::->079 Length::->3
c[2]::->25894029 Length::->8
输出:
c[0]::->079 Length::->3
c[1]::->25894029 Length::->8
预期产出:
split()
所以我的问题是为什么[, 079, 25894029]
在开始时产生并且额外空白,例如
var isAjaxStarted = 0;
bkLib.onDomLoaded(function(){
var myEditor = new nicEditor({iconsPath : 'include/nicEdit/nicEditorIcons.gif'}).panelInstance('area1');
if(isAjaxStarted == 0)
auto_save_func(myEditor);
});
function auto_save_func(myEditor)
{
isAjaxStarted = 1;
draft_content=myEditor.instanceById('area1').getContent();
int_id='<?=$_GET[interview_id]?>';
$.post("ajax_for_auto_save_interview.php", { interview_id: int_id,content:draft_content},
function(data){ isAjaxStarted = 0; });
setTimeout( function() { auto_sav_func(myEditor); }, 100);
}
。这是它的行为,还是我在这里做错了什么?
我怎样才能得到预期的结果?
答案 0 :(得分:3)
首先,你在角色类中有不必要的转义。你的正则表达式与:
相同String pattern = "[(?=)]";
现在,您得到一个空结果,因为(
是字符串中的第一个字符,而在第0个位置拆分确实会导致空字符串。
要避免该结果,请使用以下代码:
String str = "(079)25894029";
toks = (Character.isDigit(str.charAt(0))? str:str.substring(1)).split( "[(?=)]" );
for (String tok: toks)
System.out.printf("<<%s>>%n", tok);
<强>输出:强>
<<079>>
<<25894029>>
答案 1 :(得分:2)
当此字符串开头有正宽度匹配时 然后在开头包含一个空的前导子串 结果数组。然而,开头的零宽度匹配从不 产生这样空的前导子串。
您可以检查第一个字符是否为空字符串,如果是,则修剪该空字符串字符。
答案 2 :(得分:1)
您的正则表达式存在问题,您的方法也是如此 - 您可以使用任何正则表达式的方法来解决它。你寻求的神奇的单行内容是:
String[] c = b.replaceAll("^\\D+|\\D+$", "").split("\\D+");
这将删除所有前导/尾随非数字,然后拆分非数字。这将处理许多不同的格式和分隔符(自己尝试一些)。
请参阅live demo:
String b = "(079)25894029".trim();
String[] c = b.replaceAll("^\\D+|\\D+$", "").split("\\D+");
System.out.println(Arrays.toString(c));
制作:
[079, 25894029]