我有一个类似“3332255766122”的字符串,我希望在这样的数组中有这样的字符:333,22,55,7,66,1,22
因此,只要出现新字符,就应该将字符串分成几部分。这可能吗?
我目前的方法是检查一个字母,而不是检查下一个字母,如果它们是相等的,也检查下一个字母,依此类推,如果它们不相等,它们先前相等的字母将被添加到列表中。
答案 0 :(得分:8)
你可以使用split()
和一些正则表达式魔术:
System.out.println( Arrays.toString( "3332255766122".split( "(?<=(.))(?!\\1)" ) ));
输出:
[333, 22, 55, 7, 66, 1, 22]
正则表达式细分:
(?<=x)
是一个正零零宽度后视广告,因此它会匹配子表达式匹配后的位置x
(.)
因为上面x
的epxression是一个匹配任何角色并在下一步捕获它的捕获组。结合上面的部分,即(?<=(.))
,这意味着:&#34;匹配角色后的任何位置并将该角色捕捉到一个组中#34; (?!x)
是一个否定的预测,它匹配任何未跟随子表达式匹配的位置x
。\1
是对第一个捕获组(本例中为(.)
)匹配的反向引用,因此结合上面的部分,即(?!\1)
,这匹配任何一个与在单词中,表达式意味着:&#34;匹配任何未跟随相同字符的字符后的任何位置&#34;。
答案 1 :(得分:5)
这可能对您有用:
333
22
55
7
66
1
22
O / P:
try {
rs = stmt.executeQuery("SELECT * FROM systemaccount where ID = '"+getValue+"'");
while(rs.next())
{
fname.setText(rs.getString("First_Name"));
mname.setSelectedItem(rs.getObject("Middle_name"));
lname.setText(rs.getString("Last_Name"));
address.setText(rs.getString("address"));
contact.setText(rs.getString("Contact_Number"));
user.setText((String) getValue((Integer) rs.getObject("User"), "user"));
usertype.setSelectedItem(getValue((Integer) rs.getObject("user_type"), "user_type")); //<-----THE ERROR IS HERE
}
} catch (SQLException ex) {
Logger.getLogger(SystemAccount.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
}
PS:我认为 Thomas'解决方案更好:)