【问题标题】:How to get string if length is more than 50?如果长度超过 50,如何获取字符串?
【发布时间】:2013-09-10 10:21:28
【问题描述】:

在java中如何分割一个字符串值,如果>50,那么最后一个逗号之后的字符串应该被分配给另一个字符串。

例如:

String test = "ASDFGHJKLPOIUYTRE YUIOOPPKMABJFD AJDJDJDJD, DJDJDJD DJDJDJ, JDJDJD UYUYUAU JKBFDKJBDKJJK";

以上字符串的长度为 88。 在第 50 个字符 @59th "," 之后出现,因此字符串应与最后一个后续的 "comma" 分割,输出应如下所示:

ASDFGHJKLPOIUYTRE YUIOOPPKMABJFD AJDJDJDJD,DJDJDJD DJDJDJ,

JDJDJD UYUYUAU JKBFDKJBDKJJK

提前谢谢!!!

我试过如下:

if(add1.length() > 50){
            for(int i=50;i<add1.length();i++){
                if(add1.charAt(i)== ','){
                    add2 = add1.substring((i+1),add1.length());
                    add1 = add1.substring(0,i);
                }
            }
        }

【问题讨论】:

  • 为每个字符做一个循环,计算每个循环,然后将每个字母保存到字符串 A 中。如果计数器大于 50 && 实际字符 == ",",则保存循环的其余部分到字符串 B
  • 这是公里(或英里)以外的家庭作业的味道
  • 如果最后一个逗号在第 50 个字符之前但字符串长度>50 怎么办?你应该分开吗?
  • @Pshemo,如果是这样就不需要拆分
  • 这是您必须实际编写代码的地方。正如 Quirliom 所建议的那样,indexOf 的两个参数版本可能会很有帮助,尽管如果需要也可以不使用它。

标签: java string


【解决方案1】:

您可以使用字符串的indexOf 方法来查找下一个逗号,然后手动拆分:

if(test.length() > 50){
    int comma = test.indexOf(',', 50);
    if(comma >= 0){

        //Bit before comma
        String partOne = test.substring(0, comma);

        //Bit after comma
        String partTwo = test.substring(comma);

        //Do Something
    }
}

【讨论】:

  • 通常需要删除第二个子字符串上的任何前导空格(可能还有第一个子字符串上的尾随空格)。 trim() 很适合。
  • 如何对 50 之前的最后一个逗号执行相同操作。
  • 在我的脑海中,你可以尝试在索引test.substring(0, 50).lastIndexOf(','); 处拆分,但可能有更好的方法。
【解决方案2】:
String someString = "";
    int lastCommaPosition = someString.lastIndexOf(",");
    if(lastCommaPosition > 50){
        String firstPart = someString.substring(0,lastCommaPosition +1);
        String secondPart = someString.substring(lastCommaPosition);
    }

【讨论】:

    【解决方案3】:

    试试subString()indexOf()replace()

    if(test.length() > 50)
            {
                System.out.println(test.substring(test.lastIndexOf(",") + 1, test.length()).replace(",", ""));
            }
    

    【讨论】:

    • 我认为 OP 要求在第 50 个字符后拆分
    • 是的,我知道,但他提到了以下内容“所以字符串应该与最后一个后续的“逗号”“分开”
    【解决方案4】:
    String test = "ASDFGHJKLPOIUYTRE YUIOOPPKMABJFD AJDJDJDJD, DJDJDJD DJDJDJ, JDJDJD UYUYUAU JKBFDKJBDKJJK";
    int index = 0;
    if (test.length() > 50) {
        index = test.indexOf(",", 50);
    }
    String firstString = test.substring(0, index + 1);
    String secondString = test.substring(index + 1);
    System.out.println(firstString);
    System.out.println(secondString);
    

    【讨论】:

    • 你为什么要为此创建多个字符串对象。尽量减少
    • 只是为了区分输出,以便于理解。否则不需要
    • 没关系。因为 String 是不可变的,它会在堆中创建更多内存。供您纪念。
    【解决方案5】:
    // Java version
    public class StrSub {
    
        private String s = "ASDFGHJKLPOIUYTRE YUIOOPPKMABJFD AJDJDJDJD, DJDJDJD DJDJDJ, JDJDJD UYUYUAU JKBFDKJBDKJJK";
    
        private void compute() {
            int i = 50, p = 0, len = s.length();
            String s1, s2;
            for (i = 50; i < len; i++) {
                if (s.charAt(i) == ',') {
                    p = i;
                    break;
                }
            }
            System.out.println(p);
            s1 = s.substring(0, p+1);
            s2 = s.substring(p+1);
    
            System.out.println(s1);
            System.out.println(s2);
        }
    
        public static void main(String[] args) {
            StrSub s = new StrSub();        
            s.compute();
        }
    }
    

    【讨论】:

    • 是的,Java 版本即将推出。我使用 JavaScript 进行快速原型设计。
    • 那我建议稍等,用Java回答,而不是给出不能解决问题的快速回答。
    • @kadaj 你已经在 J​​S 中完成了我只是使用了你的逻辑,不用担心我会删除我的答案,我在我的答案中写下了你的名字
    【解决方案6】:

    试试这个...

    int index = 0;
    String[] out= new String[test.length()/50]();
    
    for(int i=50, j=0; test.length() > 50 ; j++){
    
    if(test.length>i){
          index = test.indexOf(",",i);
    }
    out[j] = test.subString(0,index);
    test = test.subString(index+1, test.length());
    }
    
    // Cover the boundary condition
    if(test.length() > 0){
    out[j] = test;
    

    【讨论】:

      猜你喜欢
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      相关资源
      最近更新 更多