split的问题 String s = "abc";String[] ss = s.split("");System.out.println(ss.length);System.out.println(ss[0]);输出救过是4和"空",这个空是哪里来的?什么都不写的split("")是个什么样的正则? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 String s = "abc"; String[] ss = s.split("a"); System.out.println(ss.length); System.out.println(ss[0]);//输出"" System.out.println(ss[ss.length - 1]);//输出abc String s = "abc"; String[] ss = s.split("c"); System.out.println(ss.length); System.out.println(ss[0]);//输出ab System.out.println(ss[ss.length - 1]);//输出ab比较以上两段代码,如果第被split的字符串的第一个字符就匹配,则会输出一个最前面的"",如果最后一个匹配,不会输出最后的"",因为此时也到达字符串尾部 查了String和Pattern的源码,如果输入的split参数长度小于1将无法进入split的字符串处理: if (((regex.count == 1 && ".$|()[{^?*+\\".indexOf(ch = regex.charAt(0)) == -1) || (regex.length() == 2 && regex.charAt(0) == '\\' && (((ch = regex.charAt(1))-'0')|('9'-ch)) < 0 && ((ch-'a')|('z'-ch)) < 0 && ((ch-'A')|('Z'-ch)) < 0)) && (ch < Character.MIN_HIGH_SURROGATE || ch > Character.MAX_LOW_SURROGATE)) { int off = 0; int next = 0; boolean limited = limit > 0; ArrayList<String> list = new ArrayList<>(); while ((next = indexOf(ch, off)) != -1) { if (!limited || list.size() < limit - 1) { list.add(substring(off, next)); off = next + 1; } else { // last one //assert (list.size() == limit - 1); list.add(substring(off, count)); off = count; break; } } // If no match was found, return this if (off == 0) return new String[] { this }; // Add remaining segment if (!limited || list.size() < limit) list.add(substring(off, count)); // Construct result int resultSize = list.size(); if (limit == 0) while (resultSize > 0 && list.get(resultSize-1).length() == 0) resultSize--; String[] result = new String[resultSize]; return list.subList(0, resultSize).toArray(result); } return Pattern.compile(regex).split(this, limit);未被处理的regex直接送入Pattern的complie(regex),将导致pattern被置空,并使用上次成功使用的pattern: private Pattern(String p, int f) { pattern = p; flags = f; // to use UNICODE_CASE if UNICODE_CHARACTER_CLASS present if ((flags & UNICODE_CHARACTER_CLASS) != 0) flags |= UNICODE_CASE; // Reset group index count capturingGroupCount = 1; localCount = 0; if (pattern.length() > 0) { compile(); } else { root = new Start(lastAccept); matchRoot = lastAccept; } } 一个新手的小问题!!! 选用swt还是swing? 抽象类的问题 java技术群18593694 如何实现Matrix类,一些Matrix基本运算。求代码(java学习中) 哪位有JAI的包,给提供一份!(50分) 将班级所有学生信息(Excel表中)写入TXT文件,并读取输出 有关事件处理的问题! ### 十分简单的问题,马上给分 ### 如何判断一个字符串中是否包含有小写字符?不是转换大小写!!! socket文件传输问题 一个++、--运算符问题,求解?
String[] ss = s.split("a");
System.out.println(ss.length);
System.out.println(ss[0]);//输出""
System.out.println(ss[ss.length - 1]);//输出abc String s = "abc";
String[] ss = s.split("c");
System.out.println(ss.length);
System.out.println(ss[0]);//输出ab
System.out.println(ss[ss.length - 1]);//输出ab比较以上两段代码,如果第被split的字符串的第一个字符就匹配,则会输出一个最前面的"",如果最后一个匹配,不会输出最后的"",因为此时也到达字符串尾部
if (((regex.count == 1 &&
".$|()[{^?*+\\".indexOf(ch = regex.charAt(0)) == -1) ||
(regex.length() == 2 &&
regex.charAt(0) == '\\' &&
(((ch = regex.charAt(1))-'0')|('9'-ch)) < 0 &&
((ch-'a')|('z'-ch)) < 0 &&
((ch-'A')|('Z'-ch)) < 0)) &&
(ch < Character.MIN_HIGH_SURROGATE ||
ch > Character.MAX_LOW_SURROGATE))
{
int off = 0;
int next = 0;
boolean limited = limit > 0;
ArrayList<String> list = new ArrayList<>();
while ((next = indexOf(ch, off)) != -1) {
if (!limited || list.size() < limit - 1) {
list.add(substring(off, next));
off = next + 1;
} else { // last one
//assert (list.size() == limit - 1);
list.add(substring(off, count));
off = count;
break;
}
}
// If no match was found, return this
if (off == 0)
return new String[] { this }; // Add remaining segment
if (!limited || list.size() < limit)
list.add(substring(off, count)); // Construct result
int resultSize = list.size();
if (limit == 0)
while (resultSize > 0 && list.get(resultSize-1).length() == 0)
resultSize--;
String[] result = new String[resultSize];
return list.subList(0, resultSize).toArray(result);
}
return Pattern.compile(regex).split(this, limit);
未被处理的regex直接送入Pattern的complie(regex),将导致pattern被置空,并使用上次成功使用的pattern:
private Pattern(String p, int f) {
pattern = p;
flags = f; // to use UNICODE_CASE if UNICODE_CHARACTER_CLASS present
if ((flags & UNICODE_CHARACTER_CLASS) != 0)
flags |= UNICODE_CASE; // Reset group index count
capturingGroupCount = 1;
localCount = 0; if (pattern.length() > 0) {
compile();
} else {
root = new Start(lastAccept);
matchRoot = lastAccept;
}
}