我有没有办法根据regEx模式格式化字符串。那是我可以有一个字符串并应用该模式。一个完美的例子是电话号码或信用卡。例如,如果我有这个功能:
public String formatNumber(String input, String patter) {
// What to do...
}
我想在单个字符串中描述模式,而不是执行多个字符串操作以将输入转换为所需的格式。
不是输入可能不是整个输入而只是输入的一部分,它仍然需要格式化。
EXAMPLE:
-------
Pattern = "\(\d{3}\) \d{3}-\d{4}"
123456 => (123) 456
1234567 => (123) 456-7
1234567890 => (123) 456-7890
12 => (12
答案 0 :(得分:1)
好的,这个解决方案怎么样:
在this post中为@Code Jockey提供信用,您可以使用此正则表达式匹配并格式化有效电话号码。
这个正则表达式有很多变化,它非常彻底而且灵活。请参阅示例链接。非常聪明。
正则表达式:
^\D*1?\D*([2-9])\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d).*$
替换:
($1$2$3) $4$5$6-$7$8$9$10
示例:
如果匹配为false,(不是有效的电话号码),如示例所示:
123456
1234567
1234567890
12
您将使用另一个正则表达式来匹配和格式化残留物 - 例如:
(.{1,3})(.{1,3})(.{1,3})
替换:
($1) $2-$3
示例:
个人注意:我不知道您为什么要匹配并格式化无效电话号码。我个人会使用第一个正则表达式格式化有效数字,然后在错误匹配时请求用户输入有效数字。但是,我确实理解,由于不知道确切的情况或应用程序,可能需要或以某种方式格式化无效的电话号码。
答案 1 :(得分:0)
这就是我能为你做的事情
public class HelloWorld{
public static void main(String []args){
String input = "1234567890";
String patter = "(%s) %s-%s";
HelloWorld hello = new HelloWorld();
hello.formatNumber(input,patter);
}
public String formatNumber(String input, String patter) {
System.out.println(input);
System.out.println(patter);
System.out.println(String.format(patter,input.substring(0,3),input.substring(3,6),input.substring(6,10)));
return null;
}
}
您可以根据需要进行修改
答案 2 :(得分:0)
您不需要应用正则表达式,只需过滤掉输入。
我已经创建了一个示例应用,希望它会有所帮助!!
<强> MainActivity.java 强>
package com.mehuljoisar.d_asyoutypeformatter;
import android.os.Bundle;
import android.app.Activity;
import android.text.InputFilter;
import android.text.Spanned;
import android.util.Log;
import android.view.Menu;
import android.widget.EditText;
public class MainActivity extends Activity {
private EditText etCellNumber;
private InputFilter mCellNumFilter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
Log.d("dstart", ""+dstart);
if (source.length() > 0) {
if (!Character.isDigit(source.charAt(0)))
return "";
else {
if (dstart == 0) {
return "(" + source;
}
else if (dstart == 3) {
return source + ") ";
}
else if (dstart == 9)
return "-" + source;
else if (dstart >= 14)
return "";
}
} else {
}
return null;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etCellNumber = (EditText)findViewById(R.id.etCellNumber);
etCellNumber.setFilters(new InputFilter[] { mCellNumFilter });
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
<强> activity_main.xml中强>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/etCellNumber"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="phone"
android:hint="enter cell number" />
屏幕截图: