【问题标题】:string to string array conversion in javajava中字符串到字符串数组的转换
【发布时间】:2011-03-25 17:21:36
【问题描述】:

我有一个string = "name"; 我想转换成一个字符串数组。 我该怎么做? 有没有内置的java函数?手动我可以做到,但我正在寻找一个 java 内置函数。

我想要一个数组,其中字符串的每个字符都是一个字符串。 像 char 'n' 现在将字符串 "n" 存储在一个数组中。

【问题讨论】:

  • 我猜你的意思不是String[] ary = new String[] { "name" };,你需要什么操作?例如拆分字符?
  • 你的意思是字符串数组吗?你怎么会有这样的功能,它只是: String[] array = {"Name"};还是你的意思是字符数组?
  • 我想要一个数组,其中字符串的每个字符都是一个字符串。像 char 'n' 现在将字符串“n”存储在数组中

标签: java arrays string split


【解决方案1】:

【讨论】:

  • 为什么这被否决了?它看起来像是对所问问题的解决方案(无论如何我都可以理解)......尽管我认为你的意思是char[] =)
【解决方案2】:

字符串数组 = 字符数组?

或者你有一个包含多个单词的字符串,每个单词都应该是一个数组元素?

String[] array = yourString.split(wordSeparator);

【讨论】:

  • 我想要一个数组,其中字符串的每个字符都是一个字符串。像 char 'n' 现在将字符串“n”存储在数组中
【解决方案3】:
String strName = "name";
String[] strArray = new String[] {strName};
System.out.println(strArray[0]); //prints "name"

第二行分配一个长度为1的String数组,注意不需要自己指定长度,如:

String[] strArray = new String[1];

相反,长度由初始化器中的元素数量决定。使用

String[] strArray = new String[] {strName, "name1", "name2"};

创建一个长度为 3 的数组。

【讨论】:

  • 没有真正回答问题。
  • 检查问题的修订历史,您会看到问题在编辑之前要求的内容有所不同。这个答案是对第一个版本的回复。
【解决方案4】:

我想根本不需要它,因为它不会比它更简单

String[] array = {"name"};

当然,如果你坚持,你可以写:

static String[] convert(String... array) {
   return array;
}

String[] array = convert("name","age","hobby"); 

[编辑] 如果你想要单字母字符串,你可以使用:

String[] s = "name".split("");

不幸的是 s[0] 将是空的,但在此之后字母 n,a,m,e 将跟随。如果这是一个问题,您可以使用例如System.arrayCopy 以摆脱第一个数组条目。

【讨论】:

  • 我想要一个数组,其中字符串的每个字符现在本身就是一个字符串。像 char 'n' 现在将字符串“n”存储在数组中
  • @Landei 我有这个字符串 date="2013/01/05",当我使用 .split("/") 时,它不会将空字符串返回为 [0],它工作正常.我的正则表达式拆分器和你的有什么区别吗?
  • @Behzad AFAIK 你有一个有趣的行为,只有空模式的空条目,而不是你有一些分隔符。
  • @Landei 让我知道我明白了你的意思。您的意思是仅在 split 函数中使用“”返回 0 作为第一个数组值?是吗?
【解决方案5】:

为了让你开始你的作业,String.split 在一个正则表达式上拆分字符串,这个表达式可能是一个空字符串:

String[] ary = "abc".split("");

产生数组:

(java.lang.String[]) [, a, b, c]

摆脱空的第一个条目作为练习留给读者:-)

注意:在 Java 8 中,不再包含空的第一个元素。

【讨论】:

    【解决方案6】:

    假设您真的想要一个单字符串数组(不是char[]Character[]

    1。使用正则表达式:

    public static String[] singleChars(String s) {
        return s.split("(?!^)");
    }
    

    零宽度的负前瞻可防止在输入开始时进行模式匹配,因此您不会得到前导空字符串。

    2。使用Guava

    import java.util.List;
    
    import org.apache.commons.lang.ArrayUtils;
    
    import com.google.common.base.Functions;
    import com.google.common.collect.Lists;
    import com.google.common.primitives.Chars;
    
    // ...
    
    public static String[] singleChars(String s) {
        return
            Lists.transform(Chars.asList(s.toCharArray()),
                            Functions.toStringFunction())
                 .toArray(ArrayUtils.EMPTY_STRING_ARRAY);
    }
    

    【讨论】:

    • 那个正则表达式是最好的 IMO。请注意,Java 8 无论如何都修复了该特定问题。
    【解决方案7】:
    String data = "abc";
    String[] arr = explode(data);
    
    public String[] explode(String s) {
        String[] arr = new String[s.length];
        for(int i = 0; i < s.length; i++)
        {
            arr[i] = String.valueOf(s.charAt(i));
        }
        return arr;
    }
    

    【讨论】:

      【解决方案8】:
      /**
       * <pre>
       * MyUtils.splitString2SingleAlphaArray(null, "") = null
       * MyUtils.splitString2SingleAlphaArray("momdad", "") = [m,o,m,d,a,d]
       * </pre>
       * @param str  the String to parse, may be null
       * @return an array of parsed Strings, {@code null} if null String input
       */
      public static String[] splitString2SingleAlphaArray(String s){
          if (s == null )
              return null;
          char[] c = s.toCharArray();
          String[] sArray = new String[c.length];
          for (int i = 0; i < c.length; i++) {
              sArray[i] = String.valueOf(c[i]);
          }
          return sArray;
      }
      

      方法String.split 将生成空的第一个,您必须将其从数组中删除。这很无聊。

      【讨论】:

        【解决方案9】:

        你可以使用string.chars().mapToObj(e -&gt; new String(new char[] {e}));,虽然这很长并且只适用于java 8。这里还有一些方法:

        string.split(""); (Has an extra whitespace character at the beginning of the array if used before Java 8) string.split("|"); string.split("(?!^)"); Arrays.toString(string.toCharArray()).substring(1, string.length() * 3 + 1).split(", ");

        最后一个太长了,只是为了好玩!

        【讨论】:

          【解决方案10】:

          另一种方法:

          如前所述,您可以很容易地将原始字符串“名称”转换为字符数组:

          String originalString = "name";
          char[] charArray = originalString.toCharArray();
          

          要继续这个思路,您可以将 char 数组转换为 String 数组:

          String[] stringArray = new String[charArray.length];
          for (int i = 0; i < charArray.length; i++){
              stringArray[i] = String.valueOf(charArray[i]);
          }
          

          此时,您的 stringArray 将填充原始字符串“name”中的原始值。 比如现在调用

          System.out.println(stringArray[0]);
          

          在这种情况下将返回值“n”(作为字符串)。

          【讨论】:

            【解决方案11】:

            String.split() 分割一个空字符串会返回一个包含一个空字符串的单元素数组。在大多数情况下,您可能更喜欢获得一个空数组,或者如果您传入一个 null,则为 null,这正是您使用 org.apache.commons.lang3.StringUtils.split(str) 获得的。

            import org.apache.commons.lang3.StringUtils;
            
            StringUtils.split(null)       => null
            StringUtils.split("")         => []
            StringUtils.split("abc def")  => ["abc", "def"]
            StringUtils.split("abc  def") => ["abc", "def"]
            StringUtils.split(" abc ")    => ["abc"]
            

            另一个选项是 google guava Splitter.split()Splitter.splitToList(),它们会相应地返回一个迭代器和一个列表。与 apache 版本不同,Splitter 会在 null 上抛出 NPE:

            import com.google.common.base.Splitter;
            
            Splitter SPLITTER = Splitter.on(',').trimResults().omitEmptyStrings();
            
            SPLITTER.split("a,b,   c , , ,, ")     =>  [a, b, c]
            SPLITTER.split("")                     =>  []
            SPLITTER.split("  ")                   =>  []
            SPLITTER.split(null)                   =>  NullPointerException
            

            如果您想要一个列表而不是迭代器,请使用Splitter.splitToList()

            【讨论】:

              【解决方案12】:

              在 java 8 中,有一个方法可以做到这一点:toCharArray():

              String k = "abcdef";
              char[] x = k.toCharArray();
              

              这将导致以下数组:

              [a,b,c,d,e,f]
              

              【讨论】:

              • 虽然不是字符串数组,但这非常适合您需要字符而不是对单个字符串不必要地愚蠢地访问 String.charAt(0) 的情况! ;)
              • 你救了我的命@fonji
              【解决方案13】:

              基于这个问题的标题,我来到这里想将一个字符串转换为一个由一些分隔符分隔的子字符串数组。我会在此处为可能有相同问题的其他人添加该答案。

              这通过在每个空格处拆分字符串来创建一个单词数组:

              String str = "string to string array conversion in java";
              String delimiter = " ";
              String strArray[] = str.split(delimiter);
              

              这将创建以下数组:

              // [string, to, string, array, conversion, in, java]
              

              Source

              在 Java 8 中测试

              【讨论】:

                【解决方案14】:

                这里是使用 split 方法将简单字符串转换为字符串数组。

                String [] stringArray="My Name is ABC".split(" ");
                

                输出

                stringArray[0]="My";
                stringArray[1]="Name";
                stringArray[2]="is";
                stringArray[3]="ABC";
                

                【讨论】:

                  【解决方案15】:

                  只需在 Java 中使用.toCharArray() 方法:

                  String k = "abc";
                  char[] alpha = k.toCharArray();
                  

                  这在 Java 8 中应该可以正常工作。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2023-03-19
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-07-25
                    • 2012-04-17
                    相关资源
                    最近更新 更多