Обработка нити, вырезать часть нити

1

У меня есть строка со значениями, такими как -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

  • 0
    Получить данные между дефисом и периодом, может быть? Конечно, вам нужно будет обработать случай, когда ни дефис, ни точка отсутствуют.
  • 3
    Вы говорите об обработке этой строки с помощью процедуры Talend Stringhandling? Потому что тогда это другая история ...
Показать ещё 1 комментарий
Теги:
string

7 ответов

4

Почему бы вам просто не разобрать строку как число, а затем применить "абсолютный" оператор?

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);
  • 1
    Его строка может содержать числа, например 356.7800 как он упомянул, что большинство чисел в 367.0000 - 367.0000 , НО НЕ ВСЕ !
  • 0
    Является ли целью их усечение и отображение «356» или отображение 356,7800 в этом случае и чисел без точности, если они являются целыми числами?
Показать ещё 2 комментария
1

Используйте простой String.substring():

String s = "-50.000";
String out = s.substring(s.charAt(0) == '-' ? 1 : 0, s.indexOf('.'));

Если входные данные s начинаются со знака минус - он будет обрезаться, а также отключается в десятичной точке, поэтому никаких конечных нулей не будет.

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

1

Вы можете использовать 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 с более сложным регулярным выражением.

0

Это можно сделать с помощью простой математики:

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
0

Попробуй это:

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", "");
0

Попробуйте с regEx:

String yuStr =  "-7.000, 10.000, 0.000, -212.000";
System.out.println(yuStr.replaceAll("-|(\\d+)\\.\\d+", "$1"));

Вывод:

7, 10, 0, 212
0

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

Math.abs(Double.valueOf(val).intValue())

Ещё вопросы

Сообщество Overcoder
Наверх
Меню