Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:如何将字符串转换为给定的自定义格式?_Java_String - Fatal编程技术网

Java:如何将字符串转换为给定的自定义格式?

Java:如何将字符串转换为给定的自定义格式?,java,string,Java,String,我想编写一个java API,它不包含两个输入参数。第一个输入str和第二个标准格式 public String covertString(String inputStr, String strFormat) { // Need logic } 比如说, Input Arguments- inputStr: 999999999, strFormat: xxx-xx-xxxx Output : 999-99-9999 Input Arguments- inputStr: 11122233

我想编写一个java API,它不包含两个输入参数。第一个输入str和第二个标准格式

public String covertString(String inputStr, String strFormat)
{
  // Need logic
}
比如说,

Input Arguments- inputStr: 999999999, strFormat: xxx-xx-xxxx
Output :  999-99-9999

Input Arguments- inputStr: 1112223333, strFormat: (xxx) xxx-xxxx
Output :  (111) 222-3333

请建议是否有可用的公用设施?如果没有,解决此问题的最佳方法是什么?

您将逐个检查标准格式字符,如果遇到“x”,您将从inputStr写入数字,否则您将写入字符。这应该可以工作,但假设输入字符串的长度正确等。如果要执行此类检查,则由OP执行:

public String covertString(String inputStr, String strFormat)
{
    final char[] array = strFormat.toCharArray(); // dups the content
    int inputIndex = 0;

    for (int index = 0; index < array.length; index++)
        if (array[index] == 'x')
            array[index] = inputStr.charAt(inputIndex++);

    return new String(array);
}
publicstringcovertstring(stringinputstr,stringstrformat)
{
final char[]array=strFormat.toCharArray();//复制内容
int-inputIndex=0;
for(int index=0;index
第二个参数字符串strFormat您应该实现ASCII字符(-)和() 按照你的逻辑

我想这会有帮助:

试试这个:-

import javax.swing.text.MaskFormatter;


String inputStr="11122288988";
String strFormat="(###) ###-#####";
public String covertString(String inputStr, String strFormat)
{
    MaskFormatter maskFormatter= new MaskFormatter(strFormat);
    maskFormatter.setValueContainsLiteralCharacters(false);
    String finaldata=maskFormatter.valueToString(inputStr) ;
    return finaldata;
}
输出:-

Input data :- 11122288988
Formatted Data :- (111) 222-88988

您可以使用特定模式获取输出:

^(.{3})(.{3})(.{3})$ --> $1-$2-$3 to get 999-999-999 from 999999999
^(.{3})(.{3})(.{3})$ --> ($1) $2-$3 to get (999) 999-999 from 999999999

public String covertString(String inputStr, String strInputPattern, String strOutputPattern)
{
    //strInputPattern could be "^(.{3})(.{3})(.{3})$"
    //strOutputPattern could be "$1-$2-$3"
    return inputStr.replaceAll(strInputPattern, strOutputPattern)
}

我希望这能帮助您使用string.matches并使用regex筛选您的条件

像这样-----

导入java.util.Scanner

公共类社会安全编号{

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    while (true) {
        System.out
                .println("Input Social security Number  (accepted form 123-45-6789): ");
        String s = input.nextLine();
        if (s.matches("\\d{3}-\\d{2}-\\d{4}")) {
            System.out.println("SSN --- valid.");
            break;
        } else
            System.out.println("SSN --- not valid.");
    }

    input.close();
}

}

你自己做了什么尝试?我通常建议使用正则表达式或java字符串类的子字符串功能。这个网站不是免费提供正确的解决方案,而是当你遇到问题时获得帮助。我看不出你到底被困在哪里:-)你能先粘贴你的代码吗?你如何处理太短/太长/不包含数字字符的字符串?谢谢你的快速回复。我试图用一种传统的方法来解决这个问题,比如读取标准格式的字符1乘1,如果我找到“x”,我会从inputStr中写入数字,否则我会写入字符或空白。但我只是确认是否有任何实用程序可用于解决此问题。嗯,您也可以使用
格式化程序
。这看起来很棒。让我试试。谢谢你的回复。我测试了这个解决方案。这对我来说很好,解决了我的问题。非常感谢您分享完美的解决方案。感谢您的回复。这绝对是解决这类问题的方法之一。我还得到了“JDeveloper”给出的其他好的/通用的解决方案(请参见上面的答案)。