Я хочу разделить строку без использования функции разделения? - PullRequest
2 голосов
/ 30 мая 2010

Я хочу разделить строку без использования split. Кто-нибудь может решить мою проблему, я пытался, но Я не могу найти точную логику.

Ответы [ 14 ]

9 голосов
/ 30 мая 2010

Так как это, кажется, задача, разработанная как практика кодирования, я буду только руководствоваться. Никакого кода для вас, сэр, хотя логика и код не так уж и далеки друг от друга.

Вам нужно будет перебрать каждый символ строки и определить, является ли символ разделителем (например, запятой или точкой с запятой). Если нет, добавьте его в последний элемент массива, который вы планируете вернуть. Если это разделитель, создайте новую пустую строку как последний элемент массива, чтобы начать вводить ваши символы.

2 голосов
/ 14 июня 2010

Это правильный ответ

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());
             }

     }

}
2 голосов
/ 31 мая 2010

Я собираюсь предположить, что это домашнее задание, поэтому я буду давать только отрывки в виде подсказок:

Нахождение индексов всех вхождений данной подстроки

Вот пример использования indexOf с параметром fromIndex для поиска всех вхождений подстроки в большей строке:

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, Item 25: Предпочитайте списки массивам
    • Особенно хорошо работает, если вы не знаете, сколько деталей будет заранее

Строковые ссылки API

  • String substring(int beginIndex, int endIndex)
    • Возвращает новую строку, которая является подстрокой этой строки. Подстрока начинается с указанного beginIndex и продолжается до символа с индексом endIndex - 1.

Похожие вопросы

1 голос
/ 22 ноября 2018

вы можете попробовать, как я сделал `{

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 голос
/ 27 ноября 2017
/**
 * 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 голос
/ 30 января 2013

Используйте String tokenizer для разделения строк в 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 голос
/ 30 мая 2010

Теперь вы понимаете, что большинство стандартных библиотек Java имеют открытый исходный код

В этом случае вы можете начать здесь

0 голосов
/ 10 сентября 2017

Разделить строку без использования split ()

static String[] splitAString(String abc, char splitWith){
    char[] ch=abc.toCharArray();
    String temp="";
    int j=0,length=0,size=0;
    for(int i=0;i<abc.length();i++){
        if(splitWith==abc.charAt(i)){
            size++;
        }
    }
    String[] arr=new String[size+1];
    for(int i=0;i<ch.length;i++){
        if(length>j){
            j++;
            temp="";
        }
        if(splitWith==ch[i]){
            length++;
        }else{
            temp +=Character.toString(ch[i]);          
        }
    arr[j]=temp;
    }
    return arr;
}
public static void main(String[] args) {

    String[] arr=splitAString("abc-efg-ijk", '-');

    for(int i=0;i<arr.length;i++){
        System.out.println(arr[i]);
    }
}

}

0 голосов
/ 09 октября 2014
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;
       }

    }
}

Результат: Разработчик программного обеспечения Гаутам

0 голосов
/ 15 марта 2014
public class MySplit {

public static String[] mySplit(String text,String delemeter){
    java.util.List<String> parts = new java.util.ArrayList<String>();
    text+=delemeter;        

    for (int i = text.indexOf(delemeter), j=0; i != -1;) {
        parts.add(text.substring(j,i));
        j=i+delemeter.length();
        i = text.indexOf(delemeter,j);
    }


    return parts.toArray(new String[0]);
}

public static void main(String[] args) {
    String str="012ab567ab0123ab";
    String delemeter="ab";
    String result[]=mySplit(str,delemeter);
    for(String s:result)
        System.out.println(s);
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...