Разделить на столбец без использования функции разделения - PullRequest
2 голосов
/ 01 октября 2019

Я пытаюсь разделить эти значения на ID, FullName и Phone. Я знаю, что мы можем разделить его с помощью функции разделения Java. Но есть ли другие способы отделить его? Значения:

1 Peater John 2522523254
10 Neal Tom 2522523254
11 Tom Jackson 2522523254
111 Jack Smith 2522523254
12 Brownson Black 2522523254

Я пытался использовать метод подстроки, но он не будет работать должным образом.

String id = line.substring(0, 3);

Если я сделаю это, он будет работать до 4-й строки, но другие выиграли 'не работает должным образом.

Ответы [ 6 ]

1 голос
/ 01 октября 2019
package Generic;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Main
{
  public static void main(String[] args)
  {
    String txt=" 12 Brownson Black 2522523254";

    String re1=".*?";   // Non-greedy match on filler
    String re2="(\\d+)";    // Integer Number 1
    String re3="(\\s+)";    // White Space 1
    String re4="((?:[a-z][a-z]+))"; // Word 1
    String re5="(\\s+)";    // White Space 2
    String re6="((?:[a-z][a-z]+))"; // Word 2
    String re7="(\\s+)";    // White Space 3
    String re8="(\\d+)";    // Integer Number 2

    Pattern p = Pattern.compile(re1+re2+re3+re4+re5+re6+re7+re8,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
    Matcher m = p.matcher(txt);
    if (m.find())
    {
        int id = Integer.parseInt(m.group(1));

        String name =m.group(3) + " ";

        name = name+m.group(5);

        long  phone = Long.parseLong(m.group(7));

        System.out.println(id);
        System.out.println(name);
        System.out.println(phone);

    }
  }
}
1 голос
/ 01 октября 2019

Вы можете использовать регулярные выражения и Pattern

Pattern pattern = Pattern.compile("(\\d*)\s*([\\w\\s]*)\\s*(\\d*)");
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
  string id = matcher.group(0);
  string name = matcher.group(1);
  string phone = matcher.group(2);
}
1 голос
/ 01 октября 2019

Если это фиксированная длина, вы можете использовать String.substring(). Но вы также должны trim() результат, прежде чем пытаться преобразовать его в числовой:

String idTxt=line.substring(0,4);
Long id=Long.parseLong(idTxt.trim());

String name=line.substring(5,25).trim(); // or whatever the size is of name column.
0 голосов
/ 01 октября 2019

Для этого вы можете использовать StringTokenizer. Вам не нужно беспокоиться о количестве пробелов и / или табуляции до или после ваших значений, а также не нужно сложных выражений регулярных выражений:

String line = "  1    Peater John\t2522523254   ";
StringTokenizer st = new StringTokenizer(line, " \t");

String id = "";
String name = "";
String phone = "";

// The first token is your id, you can parse it to an int if you like or need it
if(st.hasMoreTokens()) {
  id = st.nextToken();
}

// Loop over the remaining tokens
while(st.hasMoreTokens()) {
  String token = st.nextToken();
  // As long a there are other tokens, you're processing the name
  if(st.hasMoreTokens()) {
    if(name.length() > 0) {
      name = name + " ";
    }
    name = name + token;
  } 
  // If there are no more tokens, you've reached the phone number
  else {
    phone = token;
  }
}

System.out.println(id);
System.out.println(name);
System.out.println(phone);
0 голосов
/ 01 октября 2019

Используйте регулярное выражение:

private static final Pattern RE = Pattern.compile(
        "^\\s*(\\d+)\\s+(\\S+(?: \\S+)*)\\s+(\\d+)\\s*$");

Matcher matcher = RE.matcher(s);
if (matcher.matches()) {
    System.out.println("ID: " + matcher.group(1));
    System.out.println("FullName: " + matcher.group(2));
    System.out.println("Phone: " + matcher.group(3));
}
0 голосов
/ 01 октября 2019

Что по этому поводу:

int first_space;
int last_space;
first_space = my_string.indexOf(' ');
last_space = my_string.lastIndexOf(' ');
if ((first_space > 0) && (last_space > first_space))
{
  long   id;
  String full_name;
  String phone;
  id = Long.parseLong(my_string.substring(0, first_space));
  full_name = my_string.substring(first_space + 1, last_space);
  phone = my_string.substring(last_space + 1);
}
...