Я пытаюсь обрезать последний символ из строки, если не номер Например: «2 + 3-4 *» Оттуда последний астрик нужно подрезать, число моего результата должно быть как «2 + 3-4». Если пользователь вводит «2 + 3 + 8», тогда нет необходимости обрезать, поскольку последний номер.Обрезка последнего символа, если не число
ответ
Вы можете проверить последний символ числовой или не используется ниже фрагмент кода:
например:
string value = "4+8-4*";
int outInt = 0;
bool isLastCharNumeric = int.TryParse(value[value.Length - 1].ToString(), out outInt);
if (!isLastCharNumeric)
{
//chop off the last char
value = value.Remove(value.Length - 1;);
}
Спасибо за фрагмент, он решил мою проблему –
@VenkateshKonduru - Просто отметьте, что это не сработает, если вам нужно удалить несколько нечисловых символов. Это приведет к удалению последнего. –
Исправьте, однако в вашем вопросе было сказано: «Я пытаюсь обрезать последний символ из строки, если не число» – SashaStojanovic
Вероятно, вы можете использовать регулярное выражение:
string input = "2+3+";
// Regexp => one or more occurences of a non-numeric character at
// the end of the string
string santizedInput = Regex.Replace(input, "[^0-9]+$", "");
я хотел бы использовать регулярное выражение. [^ \ D] + $
Смотреть результаты: https://regex101.com/r/pE0h48/1
Я думаю, что регулярное выражение будет хороший чистый способ решения этой проблемы.
Regex rgx = new Regex("\D+$");
string result = rgx.Replace("2+3-4*", "");
Рабочие, испытанного код
using System;
public class Program
{
public static void Main()
{
string calculation = "2+3+81%";
int length = calculation.Length;
if(!Char.IsNumber(calculation[length-1])){
calculation = calculation.TrimEnd(calculation[length-1]);
}
Console.Write(calculation);
}
}
Зачем вам нужно проверять символ в позиции, большей длины самой строки? Это приведет к тому, что исключение будет выбрасываться каждый раз. –
У меня там что-то запуталось, его непроверенный псевдокод жестко. починил это. –
Вы можете захватить последний символ и проверить, если это число, то удалить, если так.
string str = "2+3-4*";
if(!Char.IsNumber(str[str.Length - 1])){
str = str.Remove(str.Length - 1);
}
Вы можете использовать это регулярное выражение: [^0-9]$
, чтобы определить, если последний символ является то другой, чем число. Если регулярное выражение является совпадением, просто удалите последний символ.
string a = "abc";
if (Regex.IsMatch(a, "[^0-9]$"))
{
a = a.Remove(a.Length - 1);
}
Почему это становится больше любви, когда он просто бросает одного персонажа, и, как только вы подобрали то, что хотите, в чем смысл не использовать регулярное выражение ... Я бы понял, как другие ответчики, что его можно решить ** без ** regexps ... но зачем смешивать оба подхода? Во всяком случае, он падает только на нечисловой символ ... –
@ MatíasFidemraizer - я не понимаю твое последнее предложение. Предполагается, что он должен оставить нечисловой символ в соответствии с вопросом. –
@DangerZone только ** один **. –
Мой подход будет использовать регулярное выражение, но вместо того, чтобы использовать его для замены последний символ, я бы использовал регулярное выражение для извлечения действительной части строки. Мой подход закодирован на Java, но вы можете легко перевести его на C#.
Pattern pattern = Pattern.compile("([0-9]+)([\\+\\-\\:\\*][0-9])+");
Matcher m;
String input = "++2+4+5-6*3+4*2-3--";
m = pattern.matcher(input);
while(m.find()){
System.out.println(m.group());
}
Я не большой по регулярным выражениям, поскольку они довольно медленные, относительно говоря. Мы можем решить это довольно легко, указав, какие цифры есть, а затем просто проверяем, является ли последний символ одним из них. Поэтому сначала откройте, указав, что мы считаем числами.
static readonly char[] numbers = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
Теперь мы должны вернуть один из двух результатов в зависимости от того, является ли один из персонажей мы вышеперечисленные наш последний символ. Для этого можно использовать трехмерное утверждение.
var testInput = "testing5";//Testing input
var trimmedString =
numbers.Any(x => x == testInput[testInput.Length - 1]) ?//testInput.Length - 1 is going to give us the last character in the string
testInput : //It's a number so go ahead and return the full string
testInput.SubString(0, testInput.Length - 1);//It's not a number so lets return all but the last character in the string as a new string.
Таким образом, наш конечный продукт выглядит следующим образом. Я инкапсулировал его в метод, поскольку это довольно самостоятельный аспект вашего кода (предположительно).
static readonly char[] numbers = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
public static string TrimNonNumbers(string input)
{
if (string.IsNullOrEmpty(input)) return input;//Our math will produce an index out of range exception with an empty string. So this is a safety to prevent that.
return numbers.Any(x => x == testInput[testInput.Length - 1]) ? testInput : testInput.SubString(0, testInput.Length - 1);
}
Использование Regex:
string str= "2+3-4*";
str = Regex.Replace(str, "[^0-9]$", "");
- 1. Обрезка последнего символа
- 2. Обрезка последнего символа, если это запятая SQL
- 3. обрезка строки, удаление последнего символа в C#
- 4. Обрезка символа длина дисплея
- 5. Обрезка конца последнего элемента списка
- 6. Удаление последнего символа строки, если это переменная $
- 7. Регулярное выражение для совпадения последнего символа пробега
- 8. обрезка строки для определенного символа
- 9. Пакетная проверка последнего символа
- 10. Проверка последнего символа
- 11. Поиск последнего символа
- 12. Проверка последнего символа строки не работает
- 13. Удаление последнего символа объекта JSON
- 14. индекс последнего символа строки raw_input
- 15. Как вернуть положение последнего символа?
- 16. Удаление последнего символа в C
- 17. Проверка последнего символа в строке
- 18. удаление последнего символа не запятая работать
- 19. Регулярное выражение: измельчение последнего символа, если второй последний - верхний регистр?
- 20. Удаление последнего символа в ACCESS, если оно есть. "
- 21. удаления последнего символа в C
- 22. Найти последнего символа строки php
- 23. EditText автоматически до последнего символа?
- 24. Аякса живой поиск последнего символа
- 25. поиск последнего символа в случае, если условие excel
- 26. подстрока, после последнего появления символа?
- 27. Замена последнего символа в строке
- 28. Instr - последний индекс последнего символа
- 29. Удаление последнего символа из NSMutableString
- 30. последнего символа удаление в HTAccess 301 перенаправлять
Я не думаю, что это именно простофиля, только очень близкие. OP не обязательно знает, какой характер они ищут для обрезки, поэтому он требует немного большего интеллекта, чем просто обрезка определенного персонажа. –
Я должен согласиться с @DangerZone здесь - это не обман этого вопроса. – EJoshuaS
Кроме того, кажется, что есть разногласия между ответами. Что делать, если есть несколько конечных нечетных чисел? (например, «2 + 3-4 **»). Должны ли оба '*' быть удалены или только самые последние? –