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.
Просто используйте соответствующий метод: 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
Я использовал строку, названную 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;
Это дает вывод как:
значение txtV1: Те, у кого были монеты
значение txtV2: обладаемый во время дождя
значение txtV3: те, у кого были примечания, были заняты, ища жилье
String[] out = string.split("-");
должны делать то, что вы хотите. Класс String имеет множество методов для работы со строкой.
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-
Альтернативой прямой обработке строки было бы использование регулярного выражения с группами захвата. Это имеет то преимущество, что упрощает наложение более сложных ограничений на ввод. Например, следующий код разбивает строку на две части и гарантирует, что обе они состоят только из цифр:
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
Требования оставляют место для интерпретации. Я рекомендую написать метод,
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]
или это ошибка? И так далее.