我想在不使用拆分功能的情况下拆分字符串?

时间:2010-05-30 17:56:21

标签: java

我想在不使用拆分的情况下拆分字符串。任何人都可以解决我的问题但我尝试过 我找不到确切的逻辑。

16 个答案:

答案 0 :(得分:9)

由于这似乎是一个设计为编码实践的任务,我只会指导。先生,没有代码,虽然逻辑和代码并没有那么远。

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

答案 1 :(得分:2)

我会假设这是作业,所以我只会提供片段作为提示:

查找给定子字符串

的所有匹配项的索引

以下是使用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,Item 25:首选列表到数组
    • 如果您不知道预先有多少部分
    • ,请特别好

字符串API链接

相关问题

答案 2 :(得分:2)

这是正确答案

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

     }

}

答案 3 :(得分:1)

现在你做的是大多数java标准库是开源的

在这种情况下,您可以启动here

答案 4 :(得分:1)

使用String tokenizer在没有split的情况下拆分Java中的字符串:

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

答案 5 :(得分:1)

#version 430
in vec4 normal;
in vec2 uv0;

out vec4 outFragColor;

uniform sampler2D TEXTURE_0;

uniform vec3 DirectionalLightDirection;
uniform vec4 DiffuseReflectance;
uniform float Shininess;

//Blinn-Phong lighting ... TODO make this a macro

float calculateDiffuseTerm(vec3 N, vec3 L)
{
    return clamp(dot(N, L), 0.0, 1.0);
}

float calculateSpecularTermWithHalfVector(vec3 N, vec3 L, vec3 V)
{
    float term = 0.0;
    if(dot(N, L) > 0.0)
    {
        vec3 H = normalize(L+V);
        term = pow(dot(N, H), Shininess);
    }
    return term;
}

void main()
{
    //Calculate diffuse
    vec4 textureColor = texture(TEXTURE_0, uv0);

    vec3 directionalLight = -1.0 * DirectionalLightDirection;
    float diffuseTerm = calculateDiffuseTerm(normalize(normal.xyz), directionalLight);

    outFragColor = normalize(normal);// diffuseTerm * DiffuseReflectance;
}

答案 6 :(得分: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();
}` 

答案 7 :(得分:0)

逻辑是:从第一个字符开始遍历整个字符串,每当你找到一个空格时,将最后一个部分复制到一个新字符串......那不是很难吗?

答案 8 :(得分:0)

你不能拆分使用split()。您唯一的另一个选择是获取字符串char索引并获取子字符串。

答案 9 :(得分:0)

要做的就是首先定义您需要的功能。在这种情况下,它可能是:

String[] split(String s, String separator)

返回类型不必是数组。它也可以是一个列表:

List<String> split(String s, String separator)

代码大致如下:

  1. 从头开始
  2. 找到下一个分隔符
  3. 将前一个分隔符的结尾与当前分隔符的开头之间的子字符串添加到结果中
  4. 继续执行第2步,直至到达字符串
  5. 的末尾

    您需要考虑许多优点:

    • 如果字符串以分隔符开头或结尾会发生什么?
    • 如果多个分隔符彼此相邻会怎么样?
    • 拆分空字符串应该是什么结果? (1个空字段或0个字段)

答案 10 :(得分:0)

您可以使用Java标准库来完成此操作。

说分隔符是:

String s = "Harry:Potter"
int a = s.find(delimiter);

然后添加

s.substring(start, a)

到一个新的String数组。

继续这样做,直至start < string length

我猜应该够了。

答案 11 :(得分:0)

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

}

答案 12 :(得分: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

答案 13 :(得分:0)

这是我使用Scanner的方式;

import java.util.Scanner;

public class spilt {

    public static void main(String[] args)
    {
         Scanner input = new Scanner(System.in);
         System.out.print("Enter the String to be Spilted : ");
         String st = input.nextLine();
         Scanner str = new Scanner(st);
         while (str.hasNext())
         {
             System.out.println(str.next());
         }


    }

}

希望对您有帮助!!!!

答案 14 :(得分:0)

public class StringWitoutPre {

    public static void main(String[] args) {

        String str = "md taufique reja";
        int len = str.length();
        char ch[] = str.toCharArray();
        String tmp = " ";
        boolean flag = false;

        for (int i = 0; i < str.length(); i++) {
            if (ch[i] != ' ') {
                tmp = tmp + ch[i];
                flag = false;
            } else {
                flag = true;
            }
            if (flag || i == len - 1) {
                System.out.println(tmp);
                tmp = " ";
            }
        }
    }
}

答案 15 :(得分:-1)

Split a string without using 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]);
    }
}

}