2013-01-18 115 views
2

我有一个字符串,看起来像这样分割字符串转换成Java

The#red#studio#502#4 

我需要把它分成3个不同的字符串数组中要

s[0] = "The red studio" 
s[1] = "502" 
s[2] = "4" 

的问题是字符串数组第一个应该只有文字,第二个和第三个应该只有数字...

我试图玩s.split()方法,但没有运气。

+0

你检查出的Javadoc文档string.split()方法... – WeloSefer

+0

您是否尝试了StringTokenizer .http://docs.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html – SANN3

+5

您需要了解管理输入数据的特定规则。是否_always_'有些#文字#带#字#号#号? –

回答

9
String s= "The#red#studio#502#4"; 
String[] array = s.split("#(?=[0-9])"); 
for(String str : array) 
{ 
    System.out.println(str.replace('#',' ')); 
} 

输出:

The red studio 
502 
4 

Ideone link

+0

你能解释一下这个正则表达式吗?或者至少告诉我们这个词是什么,所以我可以谷歌它。谢谢 –

+1

我知道关键字'Lookahead'和'Lookbehind'。快速搜索给了我[这](http://stackoverflow.com/a/2206432/189608)。基本上,当有一个散列字符并寻找小数点时,我会进行分割,但是我不会对它进行分割,而是仅在'#' – Srinivas

1

我决定编辑我的impl,因为我认为@Srinivas的更优雅。我正在离开我的答案的其余部分,因为测试仍然有用。它也传递了@ Srinivas的例子。

package com.sandbox; 

import com.google.common.base.Joiner; 
import org.apache.commons.lang.StringUtils; 
import org.junit.Test; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Iterator; 
import java.util.List; 

import static org.junit.Assert.assertEquals; 

public class SandboxTest { 

    @Test 
    public void testQuestionInput() { 
     String[] s = makeResult("The#red#studio#502#4"); 
     assertEquals(s[0], "The red studio"); 
     assertEquals(s[1], "502"); 
     assertEquals(s[2], "4"); 
    } 

    @Test 
    public void testAdditionalRequirement() { 
     String[] s = makeResult("The#red#studio#has#more#words#502#4"); 
     assertEquals(s[0], "The red studio has more words"); 
     assertEquals(s[1], "502"); 
     assertEquals(s[2], "4"); 
    } 

    private String[] makeResult(String input) { 
     // impl inside 
    } 
} 
+0

仅通过使用split可以使它更简洁吗? – Srinivas

+0

它是使用拆分 –

+0

**只有**使用'拆分' – Srinivas

0

简单的尝试: '的String [] = yourString.split( “#”)',它会返回字符串数组....