0

标题似乎很简单。但我没有一个好主意。这是这种情况

我的 Java 程序中有这样的字符串

String scz="3282E81WHT-22/24";  

我想把上面的字符串分成3个字符串,这样

第一个字符串值应该是3282e81

下一个字符串应该是WHT(即上面字符串和的字符串部分this part is Always of 3 Characters),

下一个字符串值应该是22/24 ( Which will always occur after -)

简而言之

String first= /* do some expression on scz And value should be "3282e81" */;
String second= /* do some expression on scz And value should be "WHT" */;
String third= /* do some expression on scz And value should be "22/24" */;

输入也可以像

scz="324P25BLK-12"; 

所以324P25将是第一个字符串,BLK将是第二个 ( of 3 Characters)。12将是第三( After - symbol )

如何解决这个问题?

4

10 回答 10

4

您可以使用这样的正则表达式,(\d+[A-Z]\d+)([A-Z]+)-([/\d]+)并使用Matcher.group(int)方法可以将您的字符串分成三组。

代码片段

String str = "3282E81WHT-22/24";
//str = "324P25BLK-12";
Pattern pattern = Pattern.compile("(\\d+[A-Z]\\d+)([A-Z]+)-([/\\d]+)");
Matcher match = pattern.matcher(str);
System.out.println(match.matches());
System.out.println(match.group(1));
System.out.println(match.group(2));
System.out.println(match.group(3));

输出

true
3282E81
WHT
22/24
于 2013-08-20T04:54:58.117 回答
2

使用它将整个字符串分成两部分

String[] parts = issueField.split("-");
String first = parts[0];
String second= parts[1];

使用它将第一个字符串分成两个

if (first!=null && first.length()>=3){  
   String lastThree=first.substring(first.length()-3);
}
于 2013-08-20T04:56:59.207 回答
1

您可以使用 subString() 方法来实现此目标。subString 有许多重载。

对于第一个字符串

String first=scz.subString(0,6);
String second=scz.subString(7,9);
于 2013-08-20T04:49:51.490 回答
1

您可以使用以下正则表达式取出上述类型字符串:

\d+[A-Z]\d{2}|[A-Z]{3}|(?<=-)[\d/]+

在 Java 中,您可以通过以下方式使用上述正则表达式:

  Pattern pattern = Pattern.compile("\\d+[A-Z]\\d{2}|[A-Z]{3}|(?<=-)[\\d/]+");
  Matcher matcher = pattern.matcher("3282E81WHT-22/24");
  while (matcher.find()) {
        System.out.println(matcher.group());
  }

输出:

3282E81
WHT
22/24
于 2013-08-20T04:51:45.107 回答
1

如果您的字符串的第二部分(WHT)等始终为 3 个字符,那么以下代码肯定会对您有所帮助

String scz = "3282E81WHT-22/24";

            String Third[] = scz.split("-");
            String rev = new StringBuilder(Third[0]).reverse().toString();
            String Second=rev.substring(0,3);
            String First=rev.substring(3,rev.length());

            // here Reverse your String Back to Original
            First=new StringBuilder(First).reverse().toString();
            Second=new StringBuilder(Second).reverse().toString();

            System.out.println(First + "  " + Second + "  " + Third[1]);
于 2013-08-20T04:56:06.073 回答
0

如果字符串的长度对于 scz 是固定的,则可以使用第一、第二和第三

  String first=scz.subString(0,6);
  String second=scz.subString(7,9);
  String third=scz.subString(10,scz.length());
于 2013-08-20T04:52:38.687 回答
0
String scz="3282E81WHT-22/24";
String[] array = scz.split("-");
String str1 = (String) array[0].subSequence(0, 7);
String str2 = array[0].substring(7);

然后拆分将按此顺序进行:)

str1
str2
array[1]
于 2013-08-20T04:56:13.933 回答
0

你可以试试这个

       String scz="3282E81WHT-22/24";
       String[] arr=scz.split("-");
       System.out.println("first: "+arr[0].substring(0,7));
       System.out.println("second: "+arr[0].substring(7,10));
       System.out.println("third: "+arr[1])
于 2013-08-20T05:04:03.323 回答
0

看看我的解决方案 -

class Main {
    public static void main(String[] args) {
            String first = "";
            String second = "";
            String third = "";

            String scz="3282E81WHT-22/24";
            String[] portions = scz.split("-");
            if (portions.length > 1) {
                    third = portions[1];
            }

            String[] anotherPortions = portions[0].split("[a-zA-Z]+$");
            if (anotherPortions.length > 0) {
                    first = anotherPortions[0];
            }

            second = portions[0].substring(first.length());

            System.out.println(first);
            System.out.println(second);
            System.out.println(third);
    }
}

现场演示

于 2013-08-20T05:05:19.937 回答
0

您可以使用 char 数组而不是字符串,这样您就可以使用数组访问特定字符。例子

char scz[] = "3282E81WHT-22/24";

并通过指定要使用的数组的位置来访问单独的字符。

于 2013-08-20T04:57:44.820 回答