Java String.split()没有特定符号

时间:2015-10-12 11:18:40

标签: java string split

我有一个类似“3332255766122”的字符串,我希望在这样的数组中有这样的字符:333,22,55,7,66,1,22

因此,只要出现新字符,就应该将字符串分成几部分。这可能吗?

我目前的方法是检查一个字母,而不是检查下一个字母,如果它们是相等的,也检查下一个字母,依此类推,如果它们不相等,它们先前相等的字母将被添加到列表中。

2 个答案:

答案 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'解决方案更好:)