Как разбить строку в Java

CREATE PROCEDURE должна быть в собственной партии

. Таким образом, динамический SQL является одним из способов:

IF OBJECT_ID('Table_Exists') IS NULL
BEGIN
    EXEC ('CREATE PROCEDURE Table_Exists
         @schemaName varchar(50),
         @tableName varchar(50)
     AS
         RETURN (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = @schemaName AND TABLE_NAME = @tableName)
')
END

или DROP first

IF OBJECT_ID('Table_Exists') IS NOT NULL
  DROP PROC Table_Exists
GO
CREATE PROCEDURE Table_Exists
         @schemaName varchar(50),
         @tableName varchar(50)
     AS
         RETURN (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = @schemaName AND TABLE_NAME = @tableName)
GO

Обратите внимание на использование OBJECT_ID, чтобы узнать, существует ли proc.

1502
задан Praveen 12 September 2018 в 15:46
поделиться

6 ответов

Просто используйте соответствующий метод: String # split () .

String string = "004-034556";
String[] parts = string.split("-");
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556

Обратите внимание, что для этого требуется регулярное выражение , поэтому не забудьте при необходимости экранировать ​​специальные символы .

там 12 символов со специальными значениями: обратная косая черта \ , каретка ^ , знак доллара $ , точка или точка . , вертикальная черта или вертикальная черта | , вопросительный знак ? , звездочка или звездочка * , знак плюса + , открывающая скобка (, закрывающая скобка ) и открывающая квадратная скобка [, открывающая фигурная скобка {, Эти специальные символы часто называют «метасимволами».

Итак, если вы хотите разделить, например, период / точка . , что означает « любой символ » в регулярном выражении, используйте либо обратную косую черту \ , чтобы экранировать отдельный специальный символ, например, split («\\.") , или используйте класс символов [] для представления буквальных символов, например split (" [.] ") , либо используйте Pattern # quote () , чтобы экранировать всю строку, например split (Pattern.quote (".")) .

String[] parts = string.split(Pattern.quote(".")); // Split on period.

Чтобы заранее проверить, содержит ли строка определенные символы, просто используйте String #contains () .

if (string.contains("-")) {
    // Split it.
} else {
    throw new IllegalArgumentException("String " + string + " does not contain -");
}

Обратите внимание, это не принимает регулярное выражение. Для этого используйте вместо этого String # match () .

Если вы хотите сохранить разделение в результирующих частях, затем используйте положительный поиск . Если вы хотите, чтобы разделенный символ заканчивался в левой части, используйте положительный просмотр назад с префиксом ? <= группу в шаблоне.

String string = "004-034556";
String[] parts = string.split("(?<=-)");
String part1 = parts[0]; // 004-
String part2 = parts[1]; // 034556

Если вы хотите, чтобы разделенный символ попадал в правую часть, используйте положительный просмотр вперед, добавив префикс ? = group в шаблоне.

String string = "004-034556";
String[] parts = string.split("(?=-)");
String part1 = parts[0]; // 004
String part2 = parts[1]; // -034556

Если хотите. хотите ограничить количество получаемых частей, тогда вы можете указать желаемое количество как 2-й аргумент метода split () .

String string = "004-034556-42";
String[] parts = string.split("-", 2);
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556-42
2787
ответ дан 22 November 2019 в 20:13
поделиться

Я использовал строку, названную stringValue, и являюсь в форме чего-то вроде этого "Теми, у кого были монеты, которыми обладают во время дождя, те, у кого были примечания, были заняты, ища жилье".

я разведусь stringValue использование"" как двоеточие.

И затем я просто хотел бы к SetText () трех различных TextViews отобразить ту строку.

String stringValue = "Those who had coins, enjoyed in the rain, those who had notes were busy looking for the shelter";
String ValueSplitByColon[] = stringValue.split(",");

String firstValue = ValueSplitByColon[0];
String secondValue = ValueSplitByColon[1];
String thirdValue = ValueSplitByColon[2];

txtV1.setText(firstValue);
txtV2.setText(secondValue;
txtV3.setText(thirdValue;

Это дает вывод как:

  1. значение txtV1: Те, у кого были монеты

  2. значение txtV2: обладаемый во время дождя

  3. значение txtV3: те, у кого были примечания, были заняты, ища жилье

0
ответ дан 22 November 2019 в 20:13
поделиться
String[] out = string.split("-");

должны делать то, что вы хотите. Класс String имеет множество методов для работы со строкой.

28
ответ дан 22 November 2019 в 20:13
поделиться
String[] result = yourString.split("-");
if (result.length != 2) 
     throw new IllegalArgumentException("String not in correct format");

Это разделит вашу струну на 2 части. Первым элементом в массиве будет часть, содержащая материал перед - , а второй элемент в массиве будет содержать часть вашей строки после - .

Если длина массива отлична от 2, значит, строка была не в формате: строка-строка .

Обратите внимание на метод split () в классе String .

https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-int-

41
ответ дан 22 November 2019 в 20:13
поделиться

Альтернативой прямой обработке строки было бы использование регулярного выражения с группами захвата. Это имеет то преимущество, что упрощает наложение более сложных ограничений на ввод. Например, следующий код разбивает строку на две части и гарантирует, что обе они состоят только из цифр:

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

class SplitExample
{
    private static Pattern twopart = Pattern.compile("(\\d+)-(\\d+)");

    public static void checkString(String s)
    {
        Matcher m = twopart.matcher(s);
        if (m.matches()) {
            System.out.println(s + " matches; first part is " + m.group(1) +
                               ", second part is " + m.group(2) + ".");
        } else {
            System.out.println(s + " does not match.");
        }
    }

    public static void main(String[] args) {
        checkString("123-4567");
        checkString("foo-bar");
        checkString("123-");
        checkString("-4567");
        checkString("123-4567-890");
    }
}

Поскольку шаблон фиксирован в этом экземпляре, он может быть скомпилирован заранее и сохранен как статический член (инициализируется при загрузке класса время в примере). Регулярное выражение выглядит так:

(\d+)-(\d+)

Круглые скобки обозначают группы захвата; к строке, соответствующей этой части регулярного выражения, можно получить доступ с помощью метода Match.group (), как показано. \ D соответствует одной десятичной цифре, а + означает "соответствует одному или нескольким из предыдущего выражения). - не имеет особого значения, поэтому просто соответствует этому символу во входных данных. Обратите внимание, что вам нужно дважды экранировать обратную косую черту. при записи в виде строки Java. Некоторые другие примеры:

([A-Z]+)-([A-Z]+)          // Each part consists of only capital letters 
([^-]+)-([^-]+)            // Each part consists of characters other than -
([A-Z]{2})-(\d+)           // The first part is exactly two capital letters,
                           // the second consists of digits
74
ответ дан 22 November 2019 в 20:13
поделиться

Требования оставляют место для интерпретации. Я рекомендую написать метод,

public final static String[] mySplit(final String s)

который инкапсулирует эту функцию. Конечно, для реализации вы можете использовать String.split(...), как упоминалось в других ответах.

Вы должны написать несколько юнит-тестов для входных строк и желаемых результатов и поведения.

Хорошие кандидаты в тесты должны включать:

 - "0022-3333"
 - "-"
 - "5555-"
 - "-333"
 - "3344-"
 - "--"
 - ""
 - "553535"
 - "333-333-33"
 - "222--222"
 - "222--"
 - "--4555"

Определив соответствующие результаты теста, вы можете указать поведение.

Например, должен ли "-333" возвращаться в [,333] или это ошибка. Можно ли "333-333-33" разделить в [333,333-33] или [333-333,33] или это ошибка? И так далее.

19
ответ дан 22 November 2019 в 20:13
поделиться
Другие вопросы по тегам:

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