我想不使用split函数来分割字符串?

3

我想在不使用split函数的情况下拆分字符串。有人能解决我的问题吗?我已经尝试过了,但是找不到确切的逻辑。


1
你想使用简单分隔符还是正则表达式分隔符进行拆分? - oks16
你需要使用某种循环。这可能是split的设计方式。 - James P.
19个回答

11

由于这似乎是一项设计为编码练习的任务,我只会进行指导。不过我不会为您编写代码,虽然逻辑和代码并没有那么远。

您需要循环遍历字符串中的每个字符,并确定该字符是否为分隔符(例如逗号或分号)。如果不是,则将其添加到您计划返回的数组的最后一个元素中。如果是分隔符,则创建一个新的空字符串作为数组的最后一个元素,以开始处理您的字符。


你的逻辑帮助我解决了一个不同的问题,而非上述问题。谢谢。 - parthiban

5

我猜这是一份作业,所以我只会给出一些提示:

查找所有给定子字符串的索引

以下是使用 indexOffromIndex 参数查找较大字符串中所有子字符串出现位置的示例:

String text = "012ab567ab0123ab";

// finding all occurrences forward: Method #1
for (int i = text.indexOf("ab"); i != -1; i = text.indexOf("ab", i+1)) {
    System.out.println(i);
} // prints "3", "8", "14"

// finding all occurrences forward: Method #2
for (int i = -1; (i = text.indexOf("ab", i+1)) != -1; ) {
    System.out.println(i);
} // prints "3", "8", "14"

字符串 API 链接

  • int indexOf(String, int fromIndex)
    • 返回指定子字符串在此字符串中第一次出现的索引,从指定的索引开始。如果没有找到该子字符串,则返回 -1。

相关问题


从字符串中提取给定索引处的子字符串

以下代码片段从字符串中提取给定索引处的 substring 并将它们放入 List<String> 中:

String text = "0123456789abcdefghij";

List<String> parts = new ArrayList<String>();
parts.add(text.substring(0, 5));
parts.add(text.substring(3, 7));
parts.add(text.substring(9, 13));
parts.add(text.substring(18, 20));

System.out.println(parts); // prints "[01234, 3456, 9abc, ij]"

String[] partsArray = parts.toArray(new String[0]);

一些关键想法:

  • 《Effective Java 2nd Edition》第25条:优先使用列表而不是数组
    • 如果您事先不知道会有多少部分,则特别适用

字符串API链接

相关问题


1
/**
 * My method split without javas split.
 * Return array with words after mySplit from two texts;
 * Uses trim.
 */

public class NoJavaSplit {

    public static void main(String[] args) {
        String text1 = "Some text for example   ";
        String text2 = "   Second sentences     ";
        System.out.println(Arrays.toString(mySplit(text1, text2)));
    }

    private static String [] mySplit(String text1, String text2) {
        text1 = text1.trim() + " " + text2.trim() + " ";
        char n = ' ';
        int massValue = 0;
        for (int i = 0; i < text1.length(); i++) {
            if (text1.charAt(i) == n) {
                massValue++;
            }
        }
        String[] splitArray = new String[massValue];
        for (int i = 0; i < splitArray.length; ) {
            for (int j = 0; j < text1.length(); j++) {
                if (text1.charAt(j) == n) {
                    splitArray[i] = text1.substring(0, j);
                    text1 = text1.substring(j + 1, text1.length());
                    j = 0;
                    i++;
                }
            }
            return splitArray;
        }
        return null;
    }
}

1
你可以尝试,就像我这样做的 `{`。
public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    String str = sc.nextLine();

    for(int i = 0; i <str.length();i++) {
        if(str.charAt(i)==' ') { // whenever it found space it'll create separate words from string
            System.out.println();
            continue;
        }
        System.out.print(str.charAt(i));
    }
    sc.close();
}` 

1

这是正确的答案

import java.util.StringTokenizer;

public class tt {
    public static void main(String a[]){
    String s = "012ab567ab0123ab";

    String delims = "ab ";

    StringTokenizer st = new StringTokenizer(s, delims);
            System.out.println("No of Token = " + st.countTokens());

             while (st.hasMoreTokens())
             {
                 System.out.println(st.nextToken());
             }

     }

}

1
使用字符串分词器在Java中拆分字符串,而不需要使用split函数:
import java.util.StringTokenizer;

public class tt {
    public static void main(String a[]){
        String s = "012ab567ab0123ab";
        String delims = "ab ";
        StringTokenizer st = new StringTokenizer(s, delims);
        System.out.println("No of Token = " + st.countTokens());
        while (st.hasMoreTokens()) {
            System.out.println(st.nextToken());
        }
    }
}

1

你知道大多数Java标准库都是开源的吗?

在这种情况下,你可以从这里开始。


2
可能与问题无关,但它可以打破“白纸”综合症,并提供比Java101中更现实的代码库。能够阅读和跟踪非平凡代码库中的代码是一项被低估的技能,也非常重要。 - Peter Tillemans

0
public class WithoutSpit_method {
    public static void main(String arg[])
    {

       char[]str;
       String s="Computer_software_developer_gautam";
       String s1[];
       for(int i=0;i<s.length()-1;)
       {
       int lengh=s.indexOf("_",i); 
       if(lengh==-1)
       {
           lengh=s.length();
       }
       System.out.print(" "+s.substring(i,lengh));
       i=lengh+1;
       }

    }
}

结果:计算机软件开发者Gautam


请详细解释您的答案,而不仅仅是发布代码片段。 - user2720864

0
在Java8中,我们可以使用Pattern以更简单的方式完成任务。以下是代码。
package com.company;

import java.util.regex.Pattern;

public class umeshtest {

    public static void main(String a[]) {
        String ss = "I'm Testing and testing the new feature";
        Pattern.compile(" ").splitAsStream(ss).forEach(s -> System.out.println(s));
    }
}

0
 static void splitString(String s, int index) {
        char[] firstPart = new char[index];
        char[] secondPart = new char[s.length() - index];

        int j = 0;
        for (int i = 0; i < s.length(); i++) {
            if (i < index) {
                firstPart[i] = s.charAt(i);
            } else {
                secondPart[j] = s.charAt(i);
                if (j < s.length()-index) {
                    j++;
                }
            }
        }
        System.out.println(firstPart);
        System.out.println(secondPart);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接