Java 将字符串拆分为字母的简短、清晰的方法?

Java 将字符串拆分为字母的简短、清晰的方法?,java,string,split,Java,String,Split,我有一个非常基本的java任务: 将字符串拆分为字母(字符串类型,而不是字符) 我首先使用的是String.split(“123”),它返回一个尾随空格“{,1,2,3}”。 由于您需要将数组转换为其他数组或创建一个新数组以删除第一个空格-我搜索了一个好的appraoch,发现了许多变体,但它们都很庞大,比如使用循环、convertin转换、转换 那么如何将字符串转换为字母字符串的集合呢 通过使用StringBuffers 转换为ArrayList 使用拆分并创建一个新数组,而不引入空白 使用

我有一个非常基本的java任务:

将字符串拆分为字母(字符串类型,而不是字符)

我首先使用的是
String.split(“123”)
,它返回一个尾随空格“{,1,2,3}”。 由于您需要将数组转换为其他数组或创建一个新数组以删除第一个空格-我搜索了一个好的appraoch,发现了许多变体,但它们都很庞大,比如使用循环、convertin转换、转换

那么如何将字符串转换为字母字符串的集合呢

  • 通过使用StringBuffers
  • 转换为ArrayList
  • 使用拆分并创建一个新数组,而不引入空白
  • 使用标记器
一个简短、清晰的方法是什么样子的

我现在最喜欢的是

    String[] singleLetters = string.split("");
    singleLetters = Arrays.copyOfRange(singleLetters, 1, singleLetters.length);
更好的方法是:

    String[] singleLetters = string.split("(?!^)")  

String.tocharray()
能解决您的问题吗?

为什么不使用lenth 1?它将为您提供单个字符的
字符串

下面是一个简单的演示代码

 public void subStrChar{
    String s = "helo";
    for(int i=0;i<s.length();i++){        
        System.out.println(" " + s.substring(i, i+1));
     }
    }
public void subStrChar{
字符串s=“helo”;
对于(int i=0;i请看番石榴酱。

这个怎么样:

public static String[] splitMyString(String input)
  {
  final String[] array = new String[input.length()];
  for (int i = 0; i < input.length(); ++i)
     array[i] = input.substring(i, i+1);
  return array;
  }
publicstaticstring[]splitMyString(字符串输入)
{
最终字符串[]数组=新字符串[input.length()];
对于(int i=0;i

正则表达式将阻止开头的空字符串匹配,因此结果将不包含开头的空字符串。此解决方案将在没有任何假设的情况下工作。

不,然后我将不得不将字符转换为字符串,这需要一个循环,这是一个痛苦的问题。请进一步澄清:什么是字母?字符或字符串?字符串拆分使用正则表达式expression analysis,这使它们很方便,但不是很有效。循环会更好。在上问了一个非常类似的问题-,那里的答案对你有帮助吗?同意@AlexWien一行正则表达式并不总是effective@Skip从什么时候开始循环是“臭代码”?这么简单的事情有7行代码!!!难道没有更短的解决方案吗?如果使用此代码,只需一行代码即可使用。此外,它非常可定制。即使是内置函数背后也有代码,通常不会那么短。短代码并不意味着它是您可以拥有的最好的代码。有时,短code的幕后工作相当混乱。这是为了节省我作为程序员的时间。我不关心界面背后的代码。我不想每次为这么简单的事情编写7行代码。好吧,您只编写了一次代码,从现在开始,您只需使用一行非常短的代码,例如:String[]myArray=splitMyString(“Hello@Skip”);@Skip您不必每次都写这7行-使用方法调用。这几乎不是几个字符。
^
通常是一个类似的开始,但什么是
?!
@Skip:
(?!pattern)
是消极的向前看(向后看也有效,因为
^
是零宽度)。我只需检查当前位置是否不是字符串的起始位置,在该位置不应发生拆分。它很短,有效,但是所有解决方案中最不推荐的解决方案。您为一项原始任务触发了一个巨大的正则表达式引擎。不要用大炮射击。它可能是所有解决方案中最慢的,可读性最低,可维护性最低。第9页,共10页开发人员不会理解发生了什么,浪费了很多美元/欧元思考,这条线到底是怎么回事。@NHAHDH是的,我在上面引用了这句话,我想你已经把他的问题理解为一项智力要求很高的任务,但如果不是这样的话,你可能会在你的项目中得到解决。@Skip请阅读你自己的话:y你想要一个“清晰”的解决方案。后来你评论说你不想要一个难闻的解决方案。现在你得到了一个简短但不清晰且难闻的解决方案。
str.split("(?!^)")