Я не могу создать регулярное выражение для следующей строки [duplicate]

Чтобы предложить лучшее решение, я могу сказать, что обнаружил следующий метод:

parseFloat((0.1 + 0.2).toFixed(10)) => Will return 0.3

Позвольте мне объяснить, почему это лучшее решение. Как упоминалось выше в других ответах, рекомендуется использовать готовые для использования функции Javascript toFixed () для решения проблемы. Но, скорее всего, вы столкнетесь с некоторыми проблемами.

Представьте, что вы собираетесь добавить два числа с плавающей запятой, такие как 0.2 и 0.7, вот оно: 0.2 + 0.7 = 0.8999999999999999.

Ваш ожидаемый результат 0.9 означает, что в этом случае вам нужен результат с точностью до 1 цифры. Поэтому вы должны были использовать (0.2 + 0.7).tofixed(1), но вы не можете просто указать определенный параметр toFixed (), поскольку он зависит от заданного числа, например

`0.22 + 0.7 = 0.9199999999999999`

. В этом примере вам нужна точность в 2 цифры так что это должно быть toFixed(2), так что должно быть параметром для каждого заданного числа с плавающей запятой?

Вы могли бы сказать, что пусть это будет 10 в каждой ситуации:

(0.2 + 0.7).toFixed(10) => Result will be "0.9000000000"

Черт! Что вы собираетесь делать с этими нежелательными нулями после 9? Пришло время преобразовать его в float, чтобы сделать его по вашему желанию:

parseFloat((0.2 + 0.7).toFixed(10)) => Result will be 0.9

Теперь, когда вы нашли решение, лучше предложить его как функцию:

function floatify(number){
       return parseFloat((number).toFixed(10));
    }
 
function addUp(){
  var number1 = +$("#number1").val();
  var number2 = +$("#number2").val();
  var unexpectedResult = number1 + number2;
  var expectedResult = floatify(number1 + number2);
  $("#unexpectedResult").text(unexpectedResult);
  $("#expectedResult").text(expectedResult);
}
addUp();
input{
  width: 50px;
}
#expectedResult{
color: green;
}
#unexpectedResult{
color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="number1" value="0.2" onclick="addUp()" onkeyup="addUp()"/> +
<input id="number2" value="0.7" onclick="addUp()" onkeyup="addUp()"/> =
<p>Expected Result: <span id="expectedResult"></span></p>
<p>Unexpected Result: <span id="unexpectedResult"></span></p>

Вы можете использовать его следующим образом:

var x = 0.2 + 0.7;
floatify(x);  => Result: 0.9
-1
задан Peter Mortensen 27 February 2016 в 11:33
поделиться

5 ответов

Предположим, что у вас есть эта строка, сохраненная в переменной с именем myString.

String myString = "core/pages/viewemployee.jsff";
String newString = myString.substring(myString.lastIndexOf("/")+1, myString.indexOf("."));      

Но вам нужно сделать такой же контроль перед тем, как делать substring в этом, потому что, если нет, эти символы вы получите из lastIndexOf() или indexOf() a "-1", которые нарушат ваш вызов substring.

Предлагаю вам посмотреть документацию Javadoc .

16
ответ дан brasofilo 26 August 2018 в 05:49
поделиться

Это пути к файлам, не так ли? Рассмотрите возможность использования File.getName (), особенно если у вас уже есть объект File:

File file = new File("core/pages/viewemployee.jsff");
String name = file.getName(); // --> "viewemployee.jsff"

И удалить расширение:

String res = name.split("\\.[^\\.]*$")[0]; // --> "viewemployee"

С помощью этого мы можем обрабатывать строки типа "../viewemployee.2.jsff".

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

6
ответ дан johncip 26 August 2018 в 05:49
поделиться

Вы можете сначала разбить строку на «/», чтобы вы могли разделить каждую папку и имя файла. В этом примере у вас будут «ядро», «страницы» и «viewemployee.jsff». Я предполагаю, что вам нужно имя файла без расширения, поэтому просто примените одно действие с разделом «.». отделителя до последнего токена. У вас будет имя файла без расширения.

String myStr = "core/pages/viewemployee.bak.jsff";

String[] tokens = myStr.split("/");
String[] fileNameTokens = tokens[tokens.length - 1].split("\\.");

String fileNameStr = "";

for(int i = 0; i < fileNameTokens.length - 1; i++) {
    fileNameStr += fileNameTokens[i] + ".";
}

fileNameStr = fileNameStr.substring(0, fileNameStr.length() - 1);

System.out.print(fileNameStr) //--> "viewemployee.bak"
6
ответ дан Mehmet Sedat Güngör 26 August 2018 в 05:49
поделиться

Ниже вы получите представление employee.jsf

int idx = fileName.replaceAll("\\", "/").lastIndexOf("/");
String fileNameWithExtn =  idx >= 0 ? fileName.substring(idx + 1) : fileName;

Чтобы удалить расширение файла и получить только просмотр сотрудника, аналогично

idx = fileNameWithExtn .lastIndexOf(".");
String filename = idx >= 0 ? fileNameWithExtn.substring(0,idx) : fileNameWithExtn ;
6
ответ дан Nishanthi Grashia 26 August 2018 в 05:49
поделиться

Вы можете решить это с помощью регулярного выражения (если вам нужна только группа словных символов между последними «/» и «.»):

    String str="core/pages/viewemployee.jsff";
    str=str.replaceFirst(".*/(\\w+).*","$1");
    System.out.println(str); //prints viewemployee
17
ответ дан user 26 August 2018 в 05:49
поделиться
Другие вопросы по тегам:

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