У меня есть строка со значениями, такими как -7.000, 10.000, 0.000, -212.000
Теперь я хочу забрать.000 из строки, а также - в начале, если она есть. Мои ценности всегда должны быть положительными.
Поэтому из этих примеров я должен дать мне 7, 10, 0, 212 назад. Как я могу это сделать?
Я мог бы делать StringHandling.LEFT(myvalue, 1).equals("-")? StringHandling.LEFT(myvalue, 2): StringHandling.LEFT(myvalue, 1), но тогда у меня есть проблема, когда мои значения равны 10.000, это просто собираюсь дать мне 1
Почему бы вам просто не разобрать строку как число, а затем применить "абсолютный" оператор?
String foo = "-50.000";
double bar = Double.parseDouble(foo);
int result = (int) abs(bar);
String yourResult = String.valueOf(result);
EDIT после комментария OP:
Чтобы избежать отрицательных чисел, вы можете немного предварять этот код:
foo.replaceAll("-", "");
Если вы просто хотите, чтобы "378.890" стал "378", там было еще проще:
String foo = "378.890";
String[] bar = foo.split(".");
String result = bar[0];
И если вам нужно "0378.890", чтобы стать "378":
String foo = "378.890";
String[] bar= foo.split(".");
String foobar = bar[0];
int result = Integer.parseInt(foobar);
result = abs(result); // If necessary (depends if you want to handle it at the string level or not)
String finalResult = String.valueOf(result);
356.7800
как он упомянул, что большинство чисел в 367.0000
- 367.0000
, НО НЕ ВСЕ !
Используйте простой String.substring()
:
String s = "-50.000";
String out = s.substring(s.charAt(0) == '-' ? 1 : 0, s.indexOf('.'));
Если входные данные s
начинаются со знака минус -
он будет обрезаться, а также отключается в десятичной точке, поэтому никаких конечных нулей не будет.
Это наиболее эффективно, потому что он делает только то, что необходимо для требуемого вывода. Нет ненужных преобразований и создания объектов.
Вы можете использовать replaceAll()
или replaceFirst()
и регулярное выражение, как replaceFirst()
ниже:
\.[0-9]+
Пример:
String test = "-700.999";
test = test.replaceFirst("-", "").replaceFirst("\\.[0-9]+", "");
System.out.println(test);
Вывод:
700
Вы можете проверить это и другие примеры здесь.
Объяснение:
replaceFirst("-", "")
удалит первое появление -
с (в качестве замены будет пустое значение). replaceFirst("\\.[0-9]+", "")
удалит первое появление dot
за которой следует любое количество цифр. Если есть вероятность, что число может быть 700.
и вы хотите удалить .
а также вы можете заменить +
на *
в этом регулярном выражении. *
означает 0
или более случаев, а +
означает 1
руду.
Дополнительная информация
Вы также можете сократить это решение, для которого потребуется одна replaceAll()
invocation с более сложным регулярным выражением.
Это можно сделать с помощью простой математики:
String foo = "-1.99"; // example
double original = Double.parseDouble(foo);
double parsed = Math.floor(Math.abs(original)); // remove '-' if there is one, then round down
Попробуй это:
char[] splitChars = {',',' '};
string samplestring = "-7.000, 10.000, 0.000, -212.000 ";
string[] array = (samplestring.Split(splitChars, StringSplitOptions.RemoveEmptyEntries));
char[] splitChars1 = {'.','0'};
for(int i =0; i < array.Length; i++)
{
array[i] = array[i].TrimStart('-').Replace(".000", "");
}
Или, если он уверен, что вы всегда получите.000, в последствии, тогда легкий способ может быть:
char[] splitChars = {',',' '};
string samplestring = "-7.000, 10.000, 0.000, -212.000 ";
string output = samplestring.Replace("-", "");
output = output.Replace(".000", "");
Попробуйте с regEx:
String yuStr = "-7.000, 10.000, 0.000, -212.000";
System.out.println(yuStr.replaceAll("-|(\\d+)\\.\\d+", "$1"));
Вывод:
7, 10, 0, 212
На мой взгляд, речь идет не о строках, а о количестве чисел. Размышляя о нем как о двойном, а затем имея дело с его абсолютной ценностью, вы попадете туда, где хотите:
Math.abs(Double.valueOf(val).intValue())